2011-12-21 147 views
4

如果這兩個項目Alpha和項目Beta是C#項目,我們可以設置Beta取決於Alpha,這導致到以下構建順序:1)Alpha; 2)Beta項目的依賴性,構建順序

如果項目Alpha是C++的項目,我們不能從項目Alpha添加引用Beta因爲Visual Studio 2010中不允許這樣。實際上,我們可以破解csproj文件,記事本,但它並不能幫助。卜我們可以右擊解決方案,選擇Project Dependencies並說Beta取決於Alpha

問題:的MSBuild不履行依賴於sln文件中設置和建立在錯誤的順序項目 - 1)Beta; 2)Alpha。請注意,Visual Studio尊重構建順序。

我們怎樣才能設置構建順序相同的解決方案中的項目MSBuildC++之間C#

回答

5

嘗試將您的C++項目引用添加到C#項目之後清理解決方案。這對我很有用,雖然我偶然發現了這個「解決方法」。

對我來說,它看起來好像Visual Studio是檢查引用的項目的生成產品,當它注意到了不兼容性它會拒絕添加引用。但是,如果構建產品無法檢查(因爲您清理了解決方案),Visual Studio會愉快地添加該參考。

我測試了在Visual Studio和我們的TFS構建服務器(AFAIK使用MSBuild)中生成的解決方案,並在兩種情況下正確評估了構建依賴關係。

在你的問題,你也提到,手動編輯.csproj文件並沒有幫助。我無法證實這一點。我能添加下列引用,然後又積極構建結果:

<ProjectReference Include="..\Foo\Foo.vcxproj"> 
    <Name>Foo</Name> 
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly> 
    <Private>False</Private> 
</ProjectReference> 

我加入ReferenceOutputAssembly元素,因爲this blogs.msdn.com article表明它。根據我的經驗,雖然構建也沒有這個元素。這篇文章還值得一讀,因爲它解釋了爲什麼MSBuild不兌現在溶液中定義的依賴關係。

爲了完整起見:我在運行Visual Studio 2010,版本10.0.40219.1 SP1Rel

+0

仍然適用:使用Visual Studio 2012最終更新v11.0.60314.01 2 - 變通辦法! -tnx – 2013-05-22 10:57:30