C 如何在编译时检测目标.NET运行时是否为4.0或更高版本?

C 如何在编译时检测目标.NET运行时是否为4.0或更高版本?,c,visual-studio,msbuild,C,Visual Studio,Msbuild,我读过这篇文章,但现在我们也有了4.5版本,解决方案将不起作用。 如何检查运行时是否高于4.0? 因为它是一根弦,我猜我做不到: <DefineConstants Condition=" '$(TargetFrameworkVersion)' >= 'v4.0' ">NET_4_0</DefineConstants> NET\u 4\u 0 那么,我是否应该同时定义这两个方面: <DefineConstants Condition=" '$(TargetF

我读过这篇文章,但现在我们也有了4.5版本,解决方案将不起作用。
如何检查运行时是否高于4.0?
因为它是一根弦,我猜我做不到:

<DefineConstants Condition=" '$(TargetFrameworkVersion)' >= 'v4.0' ">NET_4_0</DefineConstants>
NET\u 4\u 0
那么,我是否应该同时定义这两个方面:

<DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.0' ">NET_4_0</DefineConstants>
<DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.5' ">NET_4_5</DefineConstants>
NET\u 4\u 0
净4×5

是否有更通用的解决方案?

您可以使用.NET库中System.String类中的任何方法,包括比较

编辑


如果您无法让属性函数足够好地工作,可以尝试使用MSBuild扩展包

继续从@MichaelPrice的回答和@HansPassant的评论

<Choose>
  <When Condition=" '$(TargetFrameworkVersion.Substring(1,3))'&gt;'3.5' ">
    <ItemGroup>
      <DefineConstants>$(DefineConstants);NEWERTHANNET35</DefineConstants>
    </ItemGroup>
  </When>
</Choose>

美元(定义常量);纽厄特汉内特35

您能给我一个替代方案吗。我以前从未处理过这些事情。@HansPassant抱歉,忘了提到你的尼克。请使用MSDN库作为示例:那么你会写
NET\u 4\u 0
?“行得通吗?”卓尔不确定。我还没试过比较。我知道Contain方法可以在字符串实例上工作<代码>网络4\u 0
。不确定这是否是你想要的。我发现关于美元准确放置位置的指导有点迟钝。它将一直工作到5.0版本。我需要版本号的数字比较。@如果您能在上面的代码中正确使用
$
,我相信这会起作用。不过,您可能希望忽略文化和外壳问题,因为您已经对文化和格式有了相当好的了解。试试简单的签名。