为Visual Studio中的所有构建定义条件常量

时间:2016-03-01 13:36:43

标签: c# visual-studio msbuild preprocessor-directive msbuild-propertygroup

我有一个包含一些代码的项目。我想确定是否使用了RyuJIT,如果是,则写RyuJIT否则LegacyJIT

我写道:

#if RuyJIT
            Console.WriteLine("RyuJIT");
#else
            Console.WriteLine("LegacyJIT");
#endif

然后我试图定义一个常量。所以我在记事本中打开.csproj并写下以下内容:

  <PropertyGroup>
    <DefineConstants Condition=" $(TargetFrameworkVersion.Replace('v', '')) &gt;= 4.6 ">RyuJIT</DefineConstants>
  </PropertyGroup>

但它不起作用:未定义常量,因此总是为任何目标框架编译第二行。我究竟做错了什么?如何在构建之间共享此常量?

1 个答案:

答案 0 :(得分:0)

使用Choose节点解决。另外,现在我可以引用.Net 4.6-only dll。

  <Choose>
    <When Condition=" $(TargetFrameworkVersion.Replace('v', '')) &gt;= 4.6 ">
      <ItemGroup>
        <Reference Include="System.Numerics" />
        <Reference Include="System.Numerics.Vectors, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
          <HintPath>..\packages\System.Numerics.Vectors.4.1.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
          <Private>True</Private>
        </Reference>
      </ItemGroup>
      <PropertyGroup>
        <DefineConstants>SIMD</DefineConstants>
      </PropertyGroup>
    </When>
  </Choose>

我将RyuJIT替换为SIMD,因为它更适合