2010-03-26 14 views
0

我想避免为此命令行。我一直在使用的MSBuild API(Microsoft.Build.FrameworkMicrosoft.Build.BuildEngine)的代码看起来像这样:什么是在代码中构建csproj文件的有效方法?

this.buildEngine = new Engine(); 
BuildPropertyGroup props = new BuildPropertyGroup(); 
props.SetProperty("Configuration", "Debug"); 
this.buildEngine.RegisterLogger(this.logger); 
Project proj = new Project(this.buildEngine); 
proj.LoadXml(this.projectFileAndPath, ProjectLoadSettings.None); 
this.buildEngine.BuildProject(proj, "Build"); 

但是我碰到很多的问题,我无法找到的答案,我真的不知道如果我这样做是正确的。首先,我找不到输出(在我认为dll结尾的任何地方都没有bin目录)。其次,我尝试构建一个我在VS2008中制作的项目,而proj.LoadXml(行因无效的xml编码而失败。但当然,这个xml文件是有效的,因为VS2008可以构建它(我选中了)。

在这一点上,我开始怀疑是否选择了一些过时的方法或者被其他方法取代的方法。意见?

+0

只是好奇,为什么你需要在代码中建立一个.csproj文件? – 2010-03-26 23:20:34

+0

这里同样的问题。为什么不使用优秀的msbuild exe文件?你也可以从你的代码中触发它。 – 2010-03-26 23:28:22

+0

@Andy:异常处理是首先想到的。我假设这个API与msbuild使用的代码是一样的,那么为什么不切掉中间人呢? – jcollum 2010-03-27 04:44:28

回答

1

LoadXml()方法需要一个包含xml的字符串,而不是文件的路径。改用Load()方法。

不,没有什么过时的Microsoft.Build命名空间。假设你正在使用3.5版本。

+0

/headlap; jeez我现在感到很沮丧。 – jcollum 2010-03-27 04:45:02

+0

我仍然停留在输出的确切位置。我确实让它在早期成功构建(必须转换到此代码,因为我的最终结果将进入IlMerge,并且它很难解决.NET框架位置......),但仍然没有实际的输出。 – jcollum 2010-03-27 04:48:16

相关问题