private void SetKnownProperties(ProjectRootElement project, CscTask task) { // MSBuild properties http://msdn.microsoft.com/en-us/library/bb629394.aspx // NAnt CscTask properties http://nant.sourceforge.net/nightly/latest/help/tasks/csc.html project.SetDefaultPropertyValue("AssemblyName", Path.GetFileNameWithoutExtension(task.OutputFile.Name)); project.EnsurePropertyExists("ProjectGuid", Guid.NewGuid().ToString("B")); if (!String.IsNullOrWhiteSpace(task.BaseAddress)) project.SetDefaultPropertyValue("BaseAddress", task.BaseAddress); project.SetDefaultPropertyValue("CheckForOverflowUnderflow", task.Checked.ToString()); project.SetDefaultPropertyValue("CodePage", task.Codepage ?? String.Empty); project.SetDefaultPropertyValue("DebugSymbols", task.Debug.ToString()); if (task.DebugOutput == DebugOutput.Enable) { task.DebugOutput = DebugOutput.Full; task.Define = String.Format("DEBUG,TRACE,{0}", task.Define); } project.SetDefaultPropertyValue("DebugType", task.DebugOutput.ToString()); if (task.DocFile != null) project.SetDefaultPropertyValue("DocumentationFile", MB.ProjectCollection.Escape(task.DocFile.GetPathRelativeTo(new DirectoryInfo(project.DirectoryPath)))); if (task.FileAlign > 0) project.SetDefaultPropertyValue("FileAlignment", task.FileAlign.ToString(CultureInfo.InvariantCulture)); // TODO: langversion // TODO: noconfig // TODO: nostdlib project.SetDefaultPropertyValue("Optimize", task.Optimize.ToString()); project.SetDefaultPropertyValue("Platform", task.Platform ?? "AnyCPU"); project.SetDefaultPropertyValue("ProjectTypeGuids", projectTypeGuid.ToString("B")); project.SetDefaultPropertyValue("AllowUnsafeBlocks", task.Unsafe.ToString()); project.SetDefaultPropertyValue("WarningLevel", task.WarningLevel ?? "4"); project.SetDefaultPropertyValue("OutputPath", MB.ProjectCollection.Escape(task.OutputFile.Directory.GetPathRelativeTo(new DirectoryInfo(project.DirectoryPath)))); project.SetDefaultPropertyValue("OutputType", task.OutputTarget); project.SetDefaultPropertyValue("DefineConstants", task.Define ?? String.Empty); // TODO: delaysign // TODO: keycontainer // TODO: main project.SetDefaultPropertyValue("TreatWarningsAsErrors", task.WarnAsError.ToString()); // TODO: win32icon // TODO: win32res // TODO: implement the rest of warning-disabling/enabling logic (see CompilerBase.WriteNoWarnList()) var warnings = new StringBuilder(); foreach (var warning in task.SuppressWarnings) if (warning.IfDefined && !warning.UnlessDefined) warnings.AppendFormat("{0},", warning.Number); project.SetDefaultPropertyValue("NoWarn", warnings.ToString()); }