条件中的MSBuild 3.5属性函数

本文关键字:属性 函数 MSBuild 条件 | 更新日期: 2023-09-27 17:58:38

我想在C#代码中获得.Net版本号,所以在.csproj文件中,我添加了以下行:

<DefineConstants Condition=" $(TargetFrameworkVersion.Replace('v', '')) &gt;= 3.5 ">$(DefineConstants);NET35_ABOVE</DefineConstants>

然后在C#代码中,我可以使用"#if NET35_ABOVE"来检查当前.Net版本是否比3.5更新。上面的行在MSBuild 4.0中正常工作,但MSBuild 3.5无法识别"Replace"函数。如果我以类似的方式动态检查.Net版本,我如何在MSBuild 3.5中进行检查?

条件中的MSBuild 3.5属性函数

您的示例在VS2010中似乎运行得很好。

以下是我尝试过的:

<PropertyGroup>
    <DefineConstants Condition=" $(TargetFrameworkVersion.Replace('v', '')) &gt;= 3.5 ">$(DefineConstants);TEST1</DefineConstants>
    <DefineConstants Condition=" $(TargetFrameworkVersion.SubString(1,3)) &gt;= 3.5 ">$(DefineConstants);TEST2</DefineConstants>
    <DefineConstants Condition=" $(TargetFrameworkVersion.SubString(1,3)) &gt;= 4.0 ">$(DefineConstants);TEST3</DefineConstants>
    <DefineConstants Condition=" $(TargetFrameworkVersion.SubString(1,3)) &gt;= 4.5 ">$(DefineConstants);TEST4</DefineConstants>
</PropertyGroup>

编辑:

但由于您使用的是VS2008,您可以使用并执行类似的操作

<Choose>
  <When Condition=" $(TargetFrameworkVersion) == 'v3.5' ">
  <PropertyGroup>
    <DefineConstants >$(DefineConstants);TEST1</DefineConstants>
  </PropertyGroup>
  </When>
</Choose>