【问题标题】:How to conditionally reference a DLL based on a compilation symbol?如何根据编译符号有条件地引用 DLL?
【发布时间】:2015-04-07 21:12:27
【问题描述】:

Visual Studio 2013。

我有一个外部 DLL,我在 csproj 文件中像这样引用它:

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

我希望此引用在编译器符号存在时起作用,并且在该编译器符号不存在时不起作用。 (为了解决下面的第一条注释,假设编译器符号称为 Fred。)

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

我很高兴能在 VS UI 中获得这样做的方法,但我会采取任何方法。

【问题讨论】:

  • @HansPassant 如果这有助于您理解问题,请假设编译器符号名为 Fred。编译器符号是构建属性吗?
  • 条件编译器符号位于 DefineConstants 构建属性中。您将检查 DefineConstants 在条件中是否包含一些字符串。类似Condition="$(DefineConstants.Contains('Fred'))"
  • @mikez 请在答案中提供更多细节,我会标记为正确
  • 请接近的选民解释一下

标签: c# visual-studio-2013 csproj compiler-directives


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您无视负面的第一条评论和近距离投票
猜你喜欢
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多