2011-06-29 57 views
26

我們這裏有多種的產品,一些共同庫。這些庫是獨立解決方案的一部分(所以它們可以獨立由TFS構建),但問題是在開發過程中,必須修改公共庫,將其編譯爲二進制文件,將其複製到公共位置,編譯產品解決方案。Visual Studio 2010的條件引用

爲了避免這種情況其實我想知道如果它可能有有條件的引用,因此對於調試配置,我將引用他們作爲項目引用,而在發佈配置,他們將是二進制的引用。

+1

沒有很好的方式,我知道;在過去,我已經使用了多種解決方案......一種「主」解決方案,如果您正在進行重大架構更改,則引用所有解決方案,然後在單個項目上進行單獨項目解決方案。一般來說,一個PITA。 –

+0

您可以通過手動修改'.csproj'文件來做到這一點。 – SLaks

+0

您可以通過修改您的建築過程來做到這一點。使用像MsBuild這樣的工具。 –

回答

39

您應該能夠通過直接編輯的項目文件與條件結構做到這一點(VS IDE不會爲你做這個)。

例如,你可能會做這樣的事情用 「選擇」 元素:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" > 
    <PropertyGroup> 
     <!-- ... --> 
    </PropertyGroup> 
    <Choose> 

     <When Condition=" '$(Configuration)'=='Debug' "> 
      <ItemGroup> 
       <ProjectReference Include="..\stuff\MyStuff.csproj"> 
        <Project>{4c7bbe47-8d84-45d4-95f0-f640ba59563c}</Project> 
        <Name>MyStuff</Name> 
       </ProjectReference> 
      </ItemGroup> 
     </When> 

     <When Condition=" '$(Configuration)'=='Retail' "> 
      <ItemGroup> 
       <Reference Include="MyStuff.dll" /> 
      </ItemGroup> 
     </When> 

    </Choose> 
    <!-- Rest of Project --> 
</Project> 

MSDN有more information about using conditional constructs

+0

做這些項目還得到部分解決方案嗎? –

+0

我相信是這樣,但在「發佈」的情況下,它應該還可以。他們應該顯示爲沒有被發現,這並不重要,因爲在發佈版本中他們並沒有被實際引用。 – Matt

4

你可能想看看的NuGet:

NuGet

的NuGet是.NET平臺的意圖自由的,開放源碼的開發者集中的包管理系統簡化流程在開發期間將第三方庫合併到.NET應用程序中

(在這裏你將成爲第三方自己在這種情況下)

注:這不會給你的條件引用,但它會緩解更新常用的組件。

相關問題