如何将 PCL 转换为 .Net 标准库

How do I convert a PCL to a .Net Standard library

所以我有一个 PCL 项目,但现在想更新它以支持 .Net Standard

我在 Microsoft website steps 上阅读过如何执行此操作:

  • Right-click on the project file and select Properties.
  • Under Library, select Target .NET Platform Standard.

但是Visual Studio2017最新版本没有这个按钮

我也看过here:

  • Close the solution in VS
  • Take the existing csproj and make a copy of it somewhere else. I’ll keep this other copy open in Notepad.
  • Copy/paste the contents of the new project you created and replace the contents of your existing project. Most of what you had in the old project isn’t really needed anymore. What you’ll likely need are settings like any signing or assembly names that don’t match the folder name/conventions. If you have ResX files with design-time generated code, you’ll need to add the following. Likewise, for Xamarin Forms pages, you’ll need this.

但我不明白上面突出显示的步骤,因为我有大量的 nuget 包和 ResX 文件,所以在我尝试时总是会导致构建错误

那么有什么直接的步骤可以将 PCL 项目更新为 .NetStandrard 项目吗?

在我看来,最好的方法是从头开始创建一个新项目(.net 标准)并将所有内容复制到那里... 这里有一些帮助:https://blog.xamarin.com/building-xamarin-forms-apps-net-standard/

我将 PCL 转换为 .Net Standard 库的步骤使用了 here 中的一些步骤和我自己的步骤:

  1. 将所有 nuget 包从旧的 packages.config 方式转换为 PackageReference

Unfortunately there’s no current migration tool, so it’s probably easiest to uninstall your existing packages, make sure the packages.config file is gone and then install the package after setting the VS Options to PackageReference. You can also do it by hand (which is what I did for my projects).

  1. 在您的项目中创建一个新的 .Net 标准 class 库,将其命名为类似于 MyPclProject1

  2. 将所有文件从旧 PCL 库拖放到 .Net Standard 库

  3. 在记事本中打开旧的 PCL .csproj 文件并将所有 PackageReference 代码复制并粘贴到新的 .Net Standard csproj 文件中

  4. 如果您使用 .resx 文件,您需要将 this code 添加到您的 .Net Standard .Csproj 文件(不确定为什么)

  5. 然后将旧 pcl 文件中的所有引用更新到新的 .Net Standard 文件并删除旧库

  6. 将新的 .NEt 标准库重命名为旧的 pcl 名称

基于 blog post from James Montemagno 关于 如何将可移植 Class 库转换为 .NET Standard 并保留 Git 历史记录:

  • 卸载您的 PCL 项目(右键单击 -> 卸载),然后开始编辑它(右键 -> 单击编辑)
  • 删除 csproj 中的所有内容并插入:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <!--<PackageReference Include="" Version=""/>-->
      </ItemGroup>
    
    </Project>
    
  • 添加回 NuGets(只需打开 packages.config,并添加上面的包引用,或通过 NuGet 包管理器。

  • 删除 AssemblyInfo.cs(现在在 csproj 中)和 packages.config(也通过 PackageReference 在 csproj 中)

今天有很多可用的指南(例如 this one),但它们基本上是相同的(除了一些项目特定的特性。我读到的是你至少需要 VS 2017 才能做到这一点。