【问题标题】:Convert .NET Core 2.0 class libraries to .NET Standard将 .NET Core 2.0 类库转换为 .NET Standard
【发布时间】:2017-09-07 04:00:53
【问题描述】:

有没有办法轻松地将面向 .NET Core 2.0 的类库转换为 .NET Standard?

如果我理解正确,如果想在针对不同 .NET 框架的项目中最大限度地提高类库的可重用性,例如.NET Framework、.NET Core、Xamarin 等,最好以 .NET Standard 为目标——前提是所有必需的 API 在目标 .NET Standard 版本中可用。

这就是我想将我的类库从 .NET Core 2.0 转换为 .NET Standard 1.6 或 .NET Standard 2.0 的原因。

【问题讨论】:

    标签: .net-core .net-standard


    【解决方案1】:

    在项目文件中,你可以将目标编译指向netstandard,并使用准确的版本。

    Proj.csproj 示例:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>netstandard1.6</TargetFramework>
      </PropertyGroup>
    </Project>
    ...
    

    Microsoft 提供了关于定位类型的良好 documentation

    Dotnet Standard 不是框架或库,它是一组抽象的指令:应该有哪些功能System.ArrayStringList 等等。目前有different implementations:.NET Framework、.NET Core、Mono、Xamarin、Windows Phone。这意味着不同的实现可以重新编译和重用你的库以netstandard为目标。对于 NuGet 包来说,这是一个非常好的选择。

    您可以使用这些版本并找到您的库所需的最小功能集。每个 Dotnet 标准都扩展了先前版本的功能。因此,选择的目标版本越少,您的库支持的平台就越多。

    【讨论】:

    • 虽然 .Net Standard 不是框架,但您仍然在 project.csproj 文件的 标记或项目的 Properties -> "Target Framework" 下拉框中设置它。命名很难!
    【解决方案2】:

    您可以编辑csproj文件(可以在VS内部通过右键单击项目文件来完成)并更改

    <TargetFramework>netcoreapp2.0</TargetFramework>
    

    <TargetFramework>netstandard2.0</TargetFramework>
    

    【讨论】:

    • 包 Microsoft.AspNetCore.All 2.0.0 支持:netcoreapp2.0 (.NETCoreApp,Version=v2.0)
    • 在我删除包引用后,它说找不到静态主方法
    • 嗯,它起作用了,但它引起了更多问题,比原来的警告更糟糕:D。顺便说一句,我相信我的 .net 核心应用程序是 2.1 而不是 2.0,即“netcoreapp2.1”。
    • 从.net标准转换为.net核心时有效
    • 我这样做了,在此更改之后,“属性”中的“目标框架”为空。这会导致任何负面后果吗?
    【解决方案3】:
    1. 转到项目文件夹
    2. 打开 .csproj 文件
    3. 更换你的目标框架

      netcoreapp2.2netstandard2.0

    看这张图更清楚

    【讨论】:

      【解决方案4】:

      我在这个话题上的五分钱。我必须转换已经用 .Net Core 3.1 和 5.0 编写的库。当您打开解决方案或将项目添加到当前的 .Net Standard 解决方案时,它不会显示 .Net Standard 选项列表。 原因是您有 2 个要更新的引用以使其正常工作。首先,更改 .csproj 文件中的目标框架。例如,要切换到 .Net Standard 2.1,我通过以下方式修改了文件:

        <PropertyGroup>
          <TargetFramework>netstandard2.1</TargetFramework>
        </PropertyGroup>
      

      其次,更改解决方案(.sln 文件)中的项目类型引用,用任何编辑器打开它,否则它也无法识别。 .Net Standard 2.1 的 GUID 是 9A19103F-16F7-4668-BE54-9A1E7A4F7556。如果您有不同版本的标准,诀窍是添加新项目,检查项目类型的 GUID 并将其替换到解决方案文件中。

      EndProject
      Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = ...
      EndProject
      

      【讨论】:

      • 您是否有机会引用“.Net Standard 2.1 的 GUID 是 9A19103F-16F7-4668-BE54-9A1E7A4F7556”我在网上找到了相互矛盾的信息,但我找不到任何似乎是确定的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多