2010-03-26 16 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

相關問題