2013-03-04 45 views
4

我有幾個配置與我的應用程序進行調試/發佈版本以及32位和64位版本。現在有32位和64位構建,我需要引用不同的dll(即那些用x86構建的和用x64構建的那些),但引用似乎對我的項目是全局的,並且不依賴於配置。現在,當我從32位版本切換到64位版本(反之亦然)時,我總是必須交換參考。實現不同配置的不同參考的適當方式是什麼?使.NET引用依賴於配置

回答

2

這可以通過手動操作一些項目文件來完成。

首先你需要在項目上點右鍵,然後點擊卸載項目。然後再次右鍵單擊它並選擇編輯[項目名稱]

當在編輯器中加載,你會看到不同的條目你refences:

<ItemGroup> 
    <Reference Include="System.Xml" /> 
    <Reference Include="WindowsBase"> 
     <RequiredTargetFramework>3.0</RequiredTargetFramework> 
    </Reference> 
    <Reference Include="PresentationCore"> 
     <RequiredTargetFramework>3.0</RequiredTargetFramework> 
    </Reference> 
    <Reference Include="PresentationFramework"> 
     <RequiredTargetFramework>3.0</RequiredTargetFramework> 
    </Reference> 
    <Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\Common\Lib\3rdParty\Prism\4.0\Desktop\Microsoft.Practices.ServiceLocation.dll</HintPath> 
    </Reference> 
</ItemGroup> 

注意,這些是一個ItemGroup節點內。 您現在可以執行一個小魔術...添加表達式到您的ItemGroup因此,如果構建配置一定的位數,它僅用於:

<ItemGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> 
    <!-- these are the references used when there is a Release x86 build --> 
    <Reference Include="System.Xml" /> 
</ItemGroup> 

注意,有沒有辦法通過這樣做用戶界面,所以你將不得不手動管理這些參考列表(例如,如果你需要添加另一個參考)。

另外請注意,這不是一個黑客...它只是利用其中一個features of MSBuild(由VS用於構建您的項目)。如果您喜歡使用任何表達式,您可以儘可能多地使用這些列表 - 如果它沒有表達式,那麼它將始終包含在構建中。

+0

+1解釋如何實際編輯csproj。我不相信這仍然是一個兩步的過程。 – JRoughan 2013-03-04 11:15:42

+0

@JRoughan乾杯:)知道這件事很方便,有時候它非常有用 - 尤其是當你想發佈的內容與你希望開發團隊每天使用的內容不同時。 – slugster 2013-03-04 11:17:03

1

您可以在配置和/或平臺上創建csproj的任何部分,因此您可以將引用放入單獨的部分中。請注意,我認爲即使沒有更改,每次都會強制重建,因爲VS無法再確定是否需要重建。可能不是問題,但會增加編譯時間。

例如

<ItemGroup Condition=" '$(Platform)' == 'x86' " > 
    <Reference ...86bit DLL... > 
</ItemGroup> 
<ItemGroup Condition=" '$(Platform)' == 'x64' " > 
    <Reference ...64bit DLL... > 
</ItemGroup> 

我認爲你可以選擇使引用的提示路徑有條件,如果簽名中沒有任何變化,但我不記得。