gpt4 book ai didi

.net-core - MSBuild 如何检测 .NET Core 的版本?

转载 作者:行者123 更新时间:2023-12-04 17:42:44 27 4
gpt4 key购买 nike

在 MSBuild 项目文件(例如 *.csproj)中,我可以通过检查 MSBuildRuntimeType 来检测它是否使用 .NET Core 或 .NET Framework 或 Mono属性(property):'$(MSBuildRuntimeType)'!='Core' .以类似的方式,我可以检测到 .NET Core 的版本(例如, 2.12.23.03.1 )吗?

最佳答案

你可以这样得到它:

System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription.ToString();

这将返回这样的版本。
.NET Core 3.1.0

您可以像这样在 MSBuild 中分配一个属性:
<MSBuildRuntimeVersion>$([System.Runtime.InteropServices.RuntimeInformation]:: FrameworkDescription.ToString())</MSBuildRuntimeVersion>

更新:

根据@minhee 的评论,我了解到上述解决方案不适用于 .NET Core 2.2 或更旧版本。我对此做了一些研究,发现这是 CoreFx 中的一个突破性变化,其中 APIs that report version is now reporting product and not file version.

这个东西是在 .NET Core 3.0 中引入的,我不知道,因为我没有使用 .NET Core 2.2 或更早版本。

话虽如此,我想提出另一种适用于所有 .NET Core 版本的解决方案。

Assembly.GetEntryAssembly().GetCustomAttribute<TargetFrameworkAttribute>().FrameworkName;

在这里,您将获得如下版本号。
.NETCoreApp,Version=v3.0

我已经在控制台应用程序中使用以下版本测试了此代码。

.NET Core 2.0
.NET Core 2.1
.NET Core 2.2
.NET Core 3.0
.NET Core 3.1

在 MSBuild 中:

您也可以在 MSBuild 中检查相同的内容。

例如,在下面的 .csproj 文件中,我根据目标框架的条件定义了两个消息任务。因此,如果我使用目标框架构建项目 netcoreapp2.2然后它将在构建日志中打印“Happy 2020 ...”,如果我使用目标框架构建项目 netcoreapp3.0然后它将在构建日志中打印“新年快乐...”。

<Project Sdk="Microsoft.NET.Sdk">
<Target Name="FooName" BeforeTargets="Build" Condition="'$(TargetFrameworkVersion)'=='v3.0'">
<Message Text="Happy New Year..." Importance="High" />
</Target>
<Target Name="FooName" BeforeTargets="Build" Condition="'$(TargetFrameworkVersion)'=='v2.2'">
<Message Text="Happy 2020..." Importance="High" />
</Target>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<RootNamespace>New_folder</RootNamespace>
</PropertyGroup>
</Project>

因此,您可以使用 TargetFrameworkVersion属性来检测 MSBuild 中 .NET Core 的当前版本。

我希望这能帮到您。

关于.net-core - MSBuild 如何检测 .NET Core 的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59496257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com