2009-11-11 160 views
7

我想通过传递解决方案文件路径(.sln文件)和构建模式(调试,发布)来编译解决方案。 我不想调用类似devenv.exe或msbuild.exe的命令行进程,而是想使用API​​并知道是否存在编译错误。如何以编程方式构建Visual Studio解决方案?

可能吗? 如果您认为如何做到这一点,请提供样品。

回答

3

您将不得不在某个时候启动一个进程来编译,您可能会产生一个启动编译的过程。这比用API挣扎要容易得多。

编辑安德鲁提供了一些很好的建议,你可能会怎么做,但我仍然认为这是一个错误。

+0

令人惊讶的是退出代码可以很容易地用脚本编写。 (我认为太多的人不记得批处理文件是多么简单和容易的工作......然而,DOS已经流行了几年,所以也许他们只是不知道。) – 2009-11-11 04:57:40

+0

够公平的,听起来确实如此使用API​​更容易。 我认为这是一个耻辱有没有简单的.net API,但有一个适当的对象返回,我们可以测试错误。等等 谢谢 – clems 2009-11-11 07:10:53

+0

猜你错过了itowlson指出的构建引擎API http://msdn.microsoft.com/en-us/library/microsoft.build.buildengine.engine.buildprojectfile.aspx – 2009-11-11 11:46:10

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 \框架\ V2.0.50727 \ MSBuild.exe

..从msbuild.exe /? ...

微软(R)构建引擎版本 2.0.50727.4927 [Microsoft .NET框架版本2.0.50727.4927] 版权所有(C)微软公司 2005保留所有权利。

语法:MSBuild.exe [选项] [项目文件]

...

例子:

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 2009-11-11 04:52:17

+0

好点...我可能只是用一个Process.Start()包装exe,但我可以看到API的优势。 – 2009-11-11 04:54:06

1

这里是一个article使用C#编译器编程讨论。这里是讨论sln文件格式的article。 sln文件是一个xml文件,所以它很容易阅读。

0

我也建议使用MSBuild API。它似乎工作得很好。但是,它在.NET4和VS2010中发生了显着变化。

相关问题