如何使用c#以编程方式在发布中编译项目和解决方案?

时间:2010-08-09 20:23:37

标签: c# compiler-construction build-automation

我的困境是我需要根据文件中指定的配置设置编译大量项目和解决方案。我找到了几种不同的方法来实现这一点,并且我已经着手使用 Microsoft.Build.BuildEngine.Engine 类,该类最近已被弃用。

以下是一些说明其用法的示例代码:(请注意,node.Path是项目文件的路径)

var builder = new Engine { BinPath = @"C:\Windows\Microsoft.NET\Framework\v3.5" };
var logger = new FileLogger { Parameters = @"logfile=" + Path.Combine(logdir, Path.GetFileName(node.Path)) + ".txt" };

compiler.RegisterLogger(logger);
bool success = compiler.BuildProjectFile(node.Path);
compiler.UnregisterAllLoggers();

return success;

我的问题 - 它在调试中编译:(

查看班级成员并没有多大帮助,因为没有多少属性暴露出来。一个提示是 PropertyGroup 属性,它似乎允许设置一些项目构建选项。但是,如何在发布中输出对BuildProjectFile的结果调用并不清楚。

我真的很感激任何帮助!

2 个答案:

答案 0 :(得分:3)

通过代码执行此操作吗?您可能会发现更容易使用NAnT之类的内容,以及NAntContribMSBuild task 相当全面,并且可以很容易地指定要构建的目标,例如:

  <msbuild project="${ProjectBasePath}\${ProjectName}.sln">
    <property name="Configuration" value="debug"/>
  </msbuild>

您也可以从command line调用MSBuild,例如:

msbuild.exe project.proj /t:rebuild /p:Configuration=Debug

优点nant会给你,而对于msbuild,你可以编写你的构建过程的脚本。我个人觉得很容易相处,你可以从中获得很大的力量和灵活性。

您也可以直接调用Visual Studio:

devenv.exe /Rebuild release "ProjectName.sln" /Out "c:\vs_errors.txt"

这也会将构建输出输出到c:\vs_errors.txt

答案 1 :(得分:1)

我不明白为什么你需要不断编译。你提到的设置文件应该在app.config或web.config中(取决于它是一个web服务)。设置文件不应更改应用程序代码的编译。如果是,我建议您更改编程模型,以便在不重新编译的情况下更改设置。