【问题标题】:How do I convert a PCL to a .Net Standard library如何将 PCL 转换为 .Net 标准库
【发布时间】:2017-10-19 08:37:41
【问题描述】:

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

我已经阅读了Microsoft website steps 来做到这一点:

  • 右键单击项目文件并选择属性。
  • 在库下,选择目标 .NET Platform Standard。

但在最新版本的 Visual Studio 2017 中不存在此按钮。

我也看过here:

  • 在VS中关闭解决方案
  • 获取现有的 csproj 并复制 它在别的地方。我会在记事本中打开这另一个副本。
  • 复制/粘贴您创建的新项目的内容并替换 现有项目的内容。你在旧时拥有的大部分东西 项目不再需要了。您可能需要的是 设置,例如任何不匹配的签名或程序集名称 文件夹名称/约定。如果您有设计时的 ResX 文件 生成的代码,您需要添加以下内容。同样,对于 Xamarin Forms 页面,你需要这个。

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

那么是否有任何直接的步骤可以将 PCL 项目更新为 .NetStandard 项目?

【问题讨论】:

  • 我发现创建一个新的解决方案和项目并复制粘贴所有类更容易。
  • @Isma 所有的 nuget 包呢?我不想重新安装所有这些。我花了足够长的时间卸载并重新安装它们以使用PackageReference

标签: c# .net portable-class-library .net-standard


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我将 PCL 转换为 .Net 标准库的步骤使用了来自 here 的一些步骤与我自己的混合:

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

    不幸的是,目前没有迁移工具,因此最简单的方法可能是卸载现有的包,确保 packages.config 文件消失,然后在将 VS 选项设置为 PackageReference 后安装包。您也可以手动完成(我的项目就是这样做的)。

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-10-02
        • 1970-01-01
        • 2018-11-28
        • 2016-12-27
        • 2018-01-11
        • 1970-01-01
        • 2021-12-31
        相关资源
        最近更新 更多