摘要:何時在項目文件中使用<ProjectReference>?
項目建設順序錯誤與Visual Studio和託管C++和C#項目
說明:
我有一個巨大的(100個+項目)的解決方案,正在建設的文件一些項目順序錯誤。該解決方案文件包含以下類型的項目:
- 本地C/C++
- 託管C++
- 託管C#
該解決方案包含了不同類型的項目之間的所有適當的依賴關係。好的,所以當我從命令行(使用MSBuild)構建時,會出現問題。託管項目(C++和C#)的依賴關係按錯誤順序構建。例如,一個項目將無法建立,因爲缺少一個管理的依賴關係。例如託管的C++文件將有一個使用聲明將失敗:
#using <foo.dll>
因爲foo.dll還不存在。
這意味着foo.dll應該是之前構建的,但沒有。 就像我前面提到的,依賴關係在解決方案文件中正確設置。舉例來說,如果foo依賴於巴茲,我有這樣的解決方案文件...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "Foo", "...\Foo.vcxproj", "{5A42640E-9E0A-442B-8A40-AA91AD5444AC}"
ProjectSection(ProjectDependencies) = postProject
...
{2CE32AE0-B129-40BA-B06E-A628FA149AB3} = {2CE32AE0-B129-40BA-B06E-A628FA149AB3}
EndProjectSection
EndProject
...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "baz", "...\baz.csproj", "{2CE32AE0-B129-40BA-B06E-A628FA149AB3}"
ProjectSection(ProjectDependencies) = postProject
...
EndProjectSection
EndProject
所以解決方案文件具有正確的依賴。但是,Foo.vcxproj項目中的依賴項僅由#using指令表示。 我在Visual Studio博客上看到,在msbuild中訂購項目時存在已知錯誤。 http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx
他們的解決辦法是添加一個名爲我的項目的一個項目,像這樣:
<ProjectReference Include="... foo.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
不管怎麼說,我的問題是:做我需要做此只爲我的託管C++項目?或者,我是否爲託管C++和C#項目執行此操作? (我相信我不需要這樣做的C#項目,因爲他們的依賴是明確的)
注意:我已經嘗試把這在我的構建中的所有項目,並沒有工作這麼熱,因爲我的本地項目中出現了許多奇怪的構建錯誤...
感謝您對此的任何迴應。
我發現如果我添加一個ProjectReference元素來鏈接到一個本地庫,那麼我會在MSBuild腳本的內部構建錯誤。因此,我開始爲所有託管C++項目添加一個ProjectReference和其他.csproj文件。現在我將它們添加到我的.csproj文件並查看它是如何發生的。 – 2012-01-04 16:33:52