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());
 }