2015-02-07 8 views
7

Visual Studio 2013.Как условно ссылаться на DLL на основе символа компиляции?

У меня есть внешний DLL, которые я ссылающийся как это в файле csproj:

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

Я хочу это ссылка на функцию, когда символ компилятор существует и не работает, если что символ компилятора не существует. (Для решения первого комментария ниже, скажем, символ компилятора называется Фред.)

Этот вопрос [Conditional Reference] заставил меня думать, я мог бы добавить атрибут Состояние ссылочного элемента, показанного выше, но я могу» t выработать какое значение, чтобы дать этому атрибуту эффект, который я хочу.

Мне было бы очень приятно, если вам будет предоставлен способ сделать это в VS UI, но я возьму любой метод.

+0

@HansPassant Предположим, что символ компилятора называется Fred, если это поможет вам понять вопрос. Является ли символ компилятора свойством build? – cja

+0

Условные символы компилятора находятся в свойстве свойств DefineConstants. вы должны проверить, что DefineConstants содержит некоторую строку в условии. Что-то вроде 'Condition = '$ (DefineConstants.Contains (' Fred '))" ' –

+0

@mikez. Пожалуйста, дайте немного больше подробностей в ответе, и я отметю его правильно. – cja

ответ

13

Условные символы компиляции находятся в собственности DefineConstants MSBuild. Убедитесь, что это содержит ваш символ:

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

Выберите отличительное имя для символа. Не то, что может быть подстрокой другой константы, такой как Debug или Trace.

+0

Спасибо, игнорируя отрицательный первый комментарий и закрытый голос – cja