在 MSBuild 项目文件(例如,*.csproj)中,我可以通过检查MSBuildRuntimeType
属性来检测它是否使用 .NET Core 或 .NET Framework 或 Mono :'$(MSBuildRuntimeType)'!='Core'
. 在类似的方式,我可以检测到.NET的核心是什么版本(例如2.1
,2.2
,3.0
,3.1
)是什么呢?
你可以这样得到它:
System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription.ToString();
Run Code Online (Sandbox Code Playgroud)
这将返回这样的版本。
.NET Core 3.1.0
Run Code Online (Sandbox Code Playgroud)
您可以像这样在 MSBuild 中分配一个属性:
<MSBuildRuntimeVersion>$([System.Runtime.InteropServices.RuntimeInformation]:: FrameworkDescription.ToString())</MSBuildRuntimeVersion>
Run Code Online (Sandbox Code Playgroud)
根据@minhee 的评论,我了解到上述解决方案不适用于 .NET Core 2.2 或更旧版本。我对此进行了一些研究,发现这是 CoreFx 中的一个重大更改,其中报告版本的 API 现在报告的是产品而不是文件版本。
这个东西是在 .NET Core 3.0 中引入的,我不知道,因为我没有使用 .NET Core 2.2 或更早版本。
话虽如此,我想提出另一种适用于所有 .NET Core 版本的解决方案。
System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription.ToString();
Run Code Online (Sandbox Code Playgroud)
在这里,您将获得如下版本号。
.NETCoreApp,Version=v3.0
Run Code Online (Sandbox Code Playgroud)
我已经在控制台应用程序中使用以下版本测试了此代码。
.NET Core 3.1.0
Run Code Online (Sandbox Code Playgroud)
您也可以在 MSBuild 中检查相同的内容。
例如,在下面的 .csproj 文件中,我根据目标框架的条件定义了两个消息任务。所以,如果我建项目与目标框架,netcoreapp2.2
然后将打印“快乐2020 ...”在构建日志,如果我有目标框架建设项目作为netcoreapp3.0
然后它会打印“新年快乐......”在构建日志。
<MSBuildRuntimeVersion>$([System.Runtime.InteropServices.RuntimeInformation]:: FrameworkDescription.ToString())</MSBuildRuntimeVersion>
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用TargetFrameworkVersion
属性来检测 MSBuild 中 .NET Core 的当前版本。
我希望这能帮到您。
归档时间: |
|
查看次数: |
1154 次 |
最近记录: |