2016-02-26 78 views
0

我發現this Gem,這將是正是我需要的:<Import Project =「WrappedProject.vcxproj」/>在Visual-Studio IDE中工作良好嗎?

要建立一個項目多個配置建設只是一個 SLN配置,而無需複製項目文件時:

導入項目是這樣的方式爲我工作在Visual Studio 2010:

TestProject64.vcxproj < ==包裝項目

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="TestProject.vcxproj" /> *<== the wrapped project* 
    <ItemGroup Label="ProjectConfigurations"> 
    <ProjectConfiguration Include="Release|x64"> *<== just needed by VS* 
     <Configuration>Release</Configuration> 
     <Platform>x64</Platform> 
    </ProjectConfiguration> 
    </ItemGroup> 
    <PropertyGroup Label="Globals"> 
    <ProjectGuid>{B7D61F1C-B413-4768-8BDB-31FD464AD053}</ProjectGuid> 
    </PropertyGroup> 
</Project> 

TestProject64.vcxproj.filters

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="TestProject.vcxproj.filters" /> 
</Project> 

TestProject.vcxproj有內部定義的兩種配置:發行| 86 和發行| 64。正如你可以看到TestProject64.vcxproj只有 Release | x64配置。在 中定義至少一個配置TestProject64.vcxproj是必要的,否則Visual Studio不會 能夠將TestProject64.vcxproj添加到解決方案。

現在可以將TestProject.vcxproj和 TestProject64.vcxproj包括到同一個解決方案中,並同時構建Release | x86和 Release | x64。

現在的問題是所有Visual Studio 2010版本是否 - 2015+將處理這口井:

  • 威爾VS嘗試編輯/莫名其妙標準化包裝項目?
  • 打開項目屬性時會不會有奇怪的行爲?
  • 從命令行上的IDE與MSBUILD進行構建時是否會出現意外的行爲?

底線:這種東西是否可以部署在生產團隊中,而不會讓人頭疼?


使用情況下(只是有人有興趣):

  • X.sln
    • proj_cpp_dll ... C++ DLL可以在64位和32位內置
    • proj_exe1_x64。 ..需要64位版本中的DLL
    • proj_exe2_Win32 ...需要32位版本中的DLL
    • 通過 Release|Any CPU(或 Release|Mixed Platforms

個內置通必須(應該)是足以建立此。

+0

似乎智能感知/查找/導航體驗將是相當不理想的,因爲所有文件都會出現兩次。無論如何,無論它是否有效,第二個答案(或虛擬)到鏈接的問題是更好的解決方案:經過測試,易於擴展和沒有意外(對你的3個問題回答「不」)。如果這不阻礙你:一個更簡單的解決方案是將一個後生成事件添加到只是執行'「/>' – stijn

+0

@stijn - 哪一個是」secnd「? –

+0

http://stackoverflow.com/a/1575053/128384 – stijn

回答

0

自MSBuild開始以來,Import元素的功能並沒有改變,所以你對三個問題的簡短回答是否定的。

然而,這取決於誰需要維護它:如果它是在你的責任之下,那麼你可以測試一對夫婦並推出其餘的。但如果他們不知道這個解決方案,它可能會導致他人走到花園的路上。在這種情況下,更安全和更詳細的是使用AfterBuild目標,如@stijn提到的

+0

看到我[自己的結論](http://stackoverflow.com/a/35867944/321013) - 如果你知道任何東西,隨時發表評論。 –

0

初步結果是...這有效地不工作。

的包裝項目加載罰款,VS不動它(乍)和包裝項目還建立很好... 除了

項目引用/依賴關係不正確建成。

x64包裝器對另一個項目有依賴性。然而,這個其他項目依賴項在包裝項目中定義。

因此,當您在IDE中調用Build時,x64包裝器項目將被正確構建,但其依賴關係將「僅」構建在活動解決方案平臺中 - 顯然這是錯誤的(因爲否則,您woudldn't不需要包裝)。

底線:只有在解決方案中沒有其他項目的項目依賴性時纔有效 - 這實際上意味着:不起作用。

相關問題