为 Visual Studio 中的所有构建定义条件常量
Define a conditional constant for all builds in Visual Studio
我有一个包含一些代码的项目。我想确定是否使用了 RyuJIT,如果是,则写 RyuJIT
,否则写 LegacyJIT
。
我写:
#if RuyJIT
Console.WriteLine("RyuJIT");
#else
Console.WriteLine("LegacyJIT");
#endif
然后我尝试定义一个常量。所以我在记事本中打开 .csproj
并写下以下内容:
<PropertyGroup>
<DefineConstants Condition=" $(TargetFrameworkVersion.Replace('v', '')) >= 4.6 ">RyuJIT</DefineConstants>
</PropertyGroup>
但它不起作用:常量未定义,因此第二行始终针对任何目标框架进行编译。我究竟做错了什么?我如何在构建之间共享这个常量?
已通过 Choose
节点解决。此外,现在我可以引用 .Net 4.6-only
dll。
<Choose>
<When Condition=" $(TargetFrameworkVersion.Replace('v', '')) >= 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
因为这样更合适
我有一个包含一些代码的项目。我想确定是否使用了 RyuJIT,如果是,则写 RyuJIT
,否则写 LegacyJIT
。
我写:
#if RuyJIT
Console.WriteLine("RyuJIT");
#else
Console.WriteLine("LegacyJIT");
#endif
然后我尝试定义一个常量。所以我在记事本中打开 .csproj
并写下以下内容:
<PropertyGroup>
<DefineConstants Condition=" $(TargetFrameworkVersion.Replace('v', '')) >= 4.6 ">RyuJIT</DefineConstants>
</PropertyGroup>
但它不起作用:常量未定义,因此第二行始终针对任何目标框架进行编译。我究竟做错了什么?我如何在构建之间共享这个常量?
已通过 Choose
节点解决。此外,现在我可以引用 .Net 4.6-only
dll。
<Choose>
<When Condition=" $(TargetFrameworkVersion.Replace('v', '')) >= 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
因为这样更合适