2011-03-30 51 views

回答

33

可以編輯的csproj文件手動設置在包含參考的ItemGroup條件屬性。

<ItemGroup Condition="'$(Configuration)' == 'Debug'"> 
    <Reference Include="MyLib"> 
     <HintPath>..\..\Debug\MyLib.dll</HintPath> 
    </Reference> 
    </ItemGroup> 

    <ItemGroup Condition="'$(Configuration)' == 'Release'"> 
    <Reference Include="MyLib"> 
     <HintPath>..\..\Release\MyLib.dll</HintPath> 
    </Reference> 
    </ItemGroup> 

有關更多信息,請參閱this article

+0

@PHeilberg當我救我的.csproj文件,它不會覆蓋這個權利? – leeand00 2011-03-30 19:49:35

+1

@ leeand00:不,它會保留提供的設置,並將它們加載到Visual Studio中。如果您使用VS打開它,它會提示您重新加載解決方案以應用您的更改。 – PHeiberg 2011-03-30 20:05:36

+5

使用條件屬性有點令人困惑的一點是,引用將在VS中顯示兩次,但實際上只會應用適合當前配置的引用。 – PHeiberg 2011-03-30 20:10:13

0

是的,但可能不會在VS2010中本地化。您可以編輯.csproj文件並使用Condition屬性來創建對Release或Debug的引用。

<Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <HintPath>..\lib\Debug\MyLib.dll</HintPath> 
</Reference> 

<Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <HintPath>..\lib\Release\MyLib.dll</HintPath> 
</Reference> 
56
<Reference Include="MyLib"> 
    <HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath> 
</Reference> 
7

WaffleSouffle的答案絕對是最好的,如果您使用Release-和Debug-文件夾,如原始問題所述。

似乎還有另一個選項並不那麼明顯,因爲在編輯csproj文件時,VS(VS2010)不會在智能感知中顯示它。

您可以將條件添加到HintPath元素。就像這樣:

<Reference Include="MyLib">  
     <HintPath Condition="'$(Configuration)'=='Release'">..\lib\MyLib.dll</HintPath> 
     <HintPath Condition="'$(Configuration)'=='Debug'">..\lib\Debug\MyLib.dll</HintPath> 
</Reference> 

我發現維韋克Rathod的一篇文章描述了在http://blog.vivekrathod.com/2013/03/conditionally-referencing-debug-and.html上述方法。

我檢查了XMS架構文件在項目文件: C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \的MSBuild \ Microsoft.Build.Core.xsd 和: C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild \ Microsoft.Build.Commontypes.xsd

我看不到該條件是HintPath元素的支持屬性,但它似乎工作.....

編輯1: 這不會使參考在Visual Studio中出現兩次,這是接受的answ問題呃。

編輯2: 其實,如果你省略HintPath產品總數Visual Studio會看在項目輸出文件夾。所以,你可以真正做到這一點:

<Reference Include="MyLib">   
    <!-- // Removed HintPath, VS looks for references in $(OutDir) --> 
</Reference> 


搜索順序在該文件中指定的Microsoft.Common.targets
參見: HintPath vs ReferencePath in Visual Studio

相關問題