private string CompileOrClean(string filePath) { BuildGraph buildGraph = new BuildGraph(); var cscp = new CSharpCompileParams(); cscp.BuildFileDir = Path.Combine(m_currentDir, m_outputDir); cscp.Sources.Add(filePath); cscp.OutputFilePath = Path.Combine(cscp.BuildFileDir, Path.GetFileName(filePath)) + ".dll"; cscp.TargetFormat = CSharpTargetFormats.Library; cscp.FrameworkVersion = CSharpFrameworkVersion.V3_5; cscp.CompileDir = m_currentDir; cscp.Debug = true; cscp.Platform = CSharpPlatforms.AnyCpu; foreach (Assembly assembly in UsingAssemblies) { if (assembly != null) { cscp.AssemblyReferences.Add(assembly.Location); } } var csc = new CSharpCompile(buildGraph, cscp); BuildOptions options = new BuildOptions(); options.FileDecider = new FileSizeDateDecider(); options.RemoveEmptyDirectories = true; var targets = new [] { cscp.OutputFilePath }; BuildAction buildAction = m_wipe ? BuildAction.Clean : BuildAction.Build; BuildResults results = buildGraph.Execute( buildAction, options, targets, true); if (!results.Success) { throw new InvalidOperationException(); } return cscp.OutputFilePath; }
static void TestCscCompile() { var cscp = new CSharpCompileParams(); cscp.CompileDir = @"K:\work\code\C#\foo"; string sourceFile = @"K:\work\code\C#\foo\Blah.cs"; cscp.Sources.Add(sourceFile); cscp.OutputFilePath = QRPath.ChangeExtension(sourceFile, ".exe"); cscp.FrameworkVersion = "v3.5"; cscp.Platform = CSharpPlatforms.AnyCpu; cscp.Debug = true; var buildGraph = new BuildGraph(); var csc = new CSharpCompile(buildGraph, cscp); csc.Execute(); csc.UpdateExplicitIO(); csc.UpdateImplicitInputs(); string depsCache = DependencyCache.CreateDepsCacheString(csc, new FileSizeDateDecider()); File.WriteAllText(csc.BuildFileBaseName + "__qr__.deps", depsCache); }