我该如何以编程方式构建Visual Studio解决方案?

7
我想通过传递解决方案文件路径(.sln文件)和构建模式(debug、release)来编译解决方案。
我不想调用像devenv.exe或msbuild.exe这样的命令行进程。相反,我想使用API,并知道是否有编译错误。
这是否可能?
如果您认为知道如何做到这一点,请提供示例。
4个回答

3

你最终需要启动一个进程来进行编译,所以最好生成一个进程来启动编译。这比使用API要容易得多。

Andrew提供了一些关于如何实现的好建议,但我仍然认为那是错误的。


1
一个退出代码在脚本中可以如此简单易用,真是太神奇了。(我认为太多人不记得批处理文件有多么简单易用......不过毕竟DOS已经不流行几年了,所以也许他们只是不知道。) - Matthew Whited
听起来确实比使用API容易得多,这很公平。 我认为遗憾的是没有一个易于使用的.NET API,可以返回适当的对象,我们可以测试错误等。 谢谢。 - clems
你可能错过了itowlson指出的Build Engine APIs http://msdn.microsoft.com/en-us/library/microsoft.build.buildengine.engine.buildprojectfile.aspx - Matthew Whited
@Matthew,我确实错过了那个点子,这是一个有趣的想法。 - stimms
这个API似乎不太容易与.sln文件一起使用。 理想情况下,我希望有一个接受.sln文件的方法。 - clems

2
正如itowlson所指出的那样,您也可以使用Build Engine APIs
...来自MSDN...
// Build a project file
bool success = engine.BuildProjectFile(@"c:\temp\validate.proj");

您可以从脚本(如批处理文件)中使用MSBuild。只需检查ErrorLevel是否为0以外的值即可...或者您可以尝试使用API。

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe

从 msbuild.exe /? ...

Microsoft (R) Build Engine Version
2.0.50727.4927 [Microsoft .NET Framework, Version 2.0.50727.4927]
Copyright (C) Microsoft Corporation
2005. All rights reserved.

Syntax: MSBuild.exe
[options] [project file]

...

Examples:

    MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release
    MSBuild MyApp.csproj /t:Clean /p:Configuration=Debug

2
由于他明确不想使用MSBuild命令行,因此可能值得向他指出MSBuild API,特别是http://msdn.microsoft.com/en-us/library/microsoft.build.buildengine.engine.buildprojectfile.aspx。 - itowlson
好观点...我可能只会用Process.Start()包装exe,但我能看出API的优势。 - Matthew Whited

1

这里有一篇文章讨论如何以编程方式使用C#编译器。这里有一篇文章讨论SLN文件格式。SLN文件是一个XML文件,因此很容易阅读。


0
我建议使用MSBuild API。它似乎运行得非常好。然而,自.NET 4和Visual Studio 2010以来,它已经发生了重大变化。

你有API的参考文献吗?(请通过编辑您的答案进行回复,而不是在评论中回复。) - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接