如何在 TFM (Target Framework moniker) 和 FrameworkName 之间转换?

How to convert between TFM (Target framework moniker) and FrameworkName?

例如

netstandard2.0(来自 Supported target frameworks)在 *.csproj 文件中用作 <TargetFramework> 或在 NuGet 中用作文件夹名称包内部结构,

.NETStandard,Version=v2.0System.Runtime.Versioning.FrameworkName class 的构造函数接受,或者可以是 TargetFrameworkAttribute.FrameworkName 的值。

如何将那些 字符串 从一种形式转换为另一种形式?至少一个(任何)方向。

您可以使用NuGet.Frameworks的源代码:

这里是将TFM转换为FrameworkName的方法: https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Frameworks/NuGetFrameworkFactory.cs#L575

(例如 netstandard2.0.NETStandard,Version=v2.0

更新 #1

好消息是它可以作为 NuGet 包使用: https://www.nuget.org/packages/NuGet.Frameworks/

这是一个 .NET 6 控制台应用程序:

using NuGet.Frameworks;
using System.Runtime.Versioning;

var tfmNetstandard20 = NuGetFramework.ParseFolder("netstandard20");

var fwNetstandard20 = new FrameworkName(tfmNetstandard20.DotNetFrameworkName);

Console.WriteLine(tfmNetstandard20);
Console.WriteLine(fwNetstandard20);

输出将是:

.NETStandard,Version=v2.0
.NETStandard,Version=v2.0