我已經爲Visual Studio 2010/C#下載了許多第三方庫(dll),並且我注意到在他們的發行版\ bin目錄中他們通常有兩個版本的Debug和Release。Visual Studio 2010根據我的項目是否正在編譯構建或發佈,與第三方庫的調試版本或發佈版本進行編譯?
有沒有辦法將這些庫添加爲項目的引用,但使用發佈版本(當我構建版本時),並使用調試版本(當我調試時)?
我已經爲Visual Studio 2010/C#下載了許多第三方庫(dll),並且我注意到在他們的發行版\ bin目錄中他們通常有兩個版本的Debug和Release。Visual Studio 2010根據我的項目是否正在編譯構建或發佈,與第三方庫的調試版本或發佈版本進行編譯?
有沒有辦法將這些庫添加爲項目的引用,但使用發佈版本(當我構建版本時),並使用調試版本(當我調試時)?
可以編輯的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。
是的,但可能不會在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>
<Reference Include="MyLib">
<HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath>
</Reference>
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
@PHeilberg當我救我的.csproj文件,它不會覆蓋這個權利? – leeand00 2011-03-30 19:49:35
@ leeand00:不,它會保留提供的設置,並將它們加載到Visual Studio中。如果您使用VS打開它,它會提示您重新加載解決方案以應用您的更改。 – PHeiberg 2011-03-30 20:05:36
使用條件屬性有點令人困惑的一點是,引用將在VS中顯示兩次,但實際上只會應用適合當前配置的引用。 – PHeiberg 2011-03-30 20:10:13