2012-01-03 41 views
6

摘要:何時在項目文件中使用<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#項目,因爲他們的依賴是明確的)

注意:我已經嘗試把這在我的構建中的所有項目,並沒有工作這麼熱,因爲我的本地項目中出現了許多奇怪的構建錯誤...

感謝您對此的任何迴應。

回答

4

我有同樣的問題,但只有C#項目。 看起來像MsBuild不使用解決方案文件依賴關係。它使用項目文件中的項目引用來創建構建順序。嘗試更新所有的ProjectReference以獲取正確的構建順序。在你的情況下,你必須將託管項目引用(依賴項)添加到C++項目文件中。

您的問題的答案是:是的,您必須爲Managed C++和C#項目執行此操作。如果使用MSBuild構建,在sln文件中設置依賴關係是不夠的。

+0

我發現如果我添加一個ProjectReference元素來鏈接到一個本地庫,那麼我會在MSBuild腳本的內部構建錯誤。因此,我開始爲所有託管C++項目添加一個ProjectReference和其他.csproj文件。現在我將它們添加到我的.csproj文件並查看它是如何發生的。 – 2012-01-04 16:33:52

相關問題