2015-02-07 78 views
7

的Visual Studio 2013年如何有條件地引用基於編譯符號的DLL?

我有我在的csproj文件中引用這樣的外部DLL:

<ItemGroup> 
    <Reference Include="NameOfDll"> 
     <HintPath>Path\To\Dll\NameOfDll.dll</HintPath> 
    </Reference> 

我想,當一個編譯器符號存在此參考作用,並不能發揮作用時編譯器符號不存在。 (爲了解決第一個評論,下面,讓我們說的編譯器符號叫做弗雷德。)

這個問題 [Conditional Reference] 讓我覺得我可以叫條件的屬性添加到上面顯示的參考元素,但我可以」 t算出賦予該屬性以實現我想要的效果的價值。

我很樂意在VS UI中給出一種方法來做到這一點,但我會採取任何方法。

+0

@HansPassant請假定編譯器符號被稱爲Fred,如果這有助於您理解問題。編譯器符號是構建屬性嗎? – cja 2015-02-07 21:35:08

+0

條件編譯器符號位於DefineConstants構建屬性中。你會檢查DefineConstants在條件中包含了一些字符串。像'Condition =「$(DefineConstants.Contains('Fred'))'''' – 2015-02-07 21:36:35

+0

@mikez請在答案中給出更多的細節,我會將其標記爲正確的 – cja 2015-02-07 21:38:24

回答

13

條件編譯符號位於DefineConstants MSBuild屬性中。檢查它是否包含您的符號:

<Reference Include="NameOfDll" Condition="$(DefineConstants.Contains('Fred'))"> 
    <HintPath>Path\To\Dll\NameOfDll.dll</HintPath> 
</Reference> 

爲符號選擇一個獨特的名稱。不是可能是另一個常量(如調試或跟蹤)的子字符串的東西。

+0

謝謝藐視負面的第一條評論和近距離投票 – cja 2015-02-08 15:28:59