C# 如何基于编译符号有条件地引用DLL?

C# 如何基于编译符号有条件地引用DLL?,c#,visual-studio-2013,csproj,compiler-directives,C#,Visual Studio 2013,Csproj,Compiler Directives,Visual Studio 2013 我在csproj文件中引用了一个外部DLL,如下所示: <ItemGroup> <Reference Include="NameOfDll"> <HintPath>Path\To\Dll\NameOfDll.dll</HintPath> </Reference> 路径\到\Dll\NameOfDll.Dll 我希望此引用在编译器符号存在时起作用,在编译器符号不存

Visual Studio 2013

我在csproj文件中引用了一个外部DLL,如下所示:

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

路径\到\Dll\NameOfDll.Dll
我希望此引用在编译器符号存在时起作用,在编译器符号不存在时不起作用。(为了解决下面的第一条注释,假设编译器符号名为Fred。)

这个问题 [ ] 让我觉得我可以在上面显示的引用元素中添加一个名为Condition的属性,但我无法确定赋予该属性什么值来实现我想要的效果


我很高兴能够在VS UI中实现这一点,但我会选择任何方法。

条件编译符号位于
DefineConstants
MSBuild属性中。检查是否包含您的符号:

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

路径\到\Dll\NameOfDll.Dll

为符号选择一个独特的名称。不是Debug或Trace之类的另一个常量的子字符串。

@HansPassant请假设编译器符号名为Fred,如果这有助于理解问题的话。编译器符号是生成属性吗?条件编译器符号位于DefineConstants生成属性中。您需要检查DefineConstants在条件中是否包含一些字符串。类似于
Condition=“$(DefineConstants.Contains('Fred'))”
@mikez请在回答中提供更多细节,我会更正。请接近投票人解释一下自己。感谢你对第一次负面评论和接近投票的蔑视