如何将PCL项目转换成.Net Standard项目

C#

浏览数:964

2019-8-30

从Xamarin.Forms 2.4开始,我们可以基于.Net Standard 2.0来构建Xamarin.Form项目,而不必像之前那样通过PCL项目进行构建。让我们迁移的.Net Standard理由是,通过.Net Standard构建的项目可以获得更好的平台移植性,对于我而言,最直观的进步是不再需要频繁地调整项目的PCL配置方案,并且不再需要小心翼翼地保持配置方案的一致性;
以下是官方给出的迁移步骤:

  • 确保你的VS环境已安装了 .NET Core 2.0

  • 更新 Xamarin.Forms 解决方案,以便使用 Xamarin.Forms 2.4,或更高版本(将VS For Mac更新到最新版本即可)。

  • 添加 一个.NET Standard Library项目到解决方案,Target Framework 选 .NET Standard 2.0。

  • 删除.NET Standard Library项目中的Class1文件(该文件是示例文件,你可以不管它,跳过这一步,就是不知道你是不是处女座了);

  • 将 Xamarin.Forms(目前已经是2.5了) NuGet 包添加到.NET Standard Library项目。

  • 在平台项目中,添加对我们刚才创建的.NET Standard Library项目的引用并删除对之前 Xamarin.Forms PCL 项目的引用。

  • 将PCL 项目中的文件复制到.NET Standard Library项目中。

  • 删除旧的 Xamarin.Forms PCL 项目。

注意:

  • 从Xamarin.Forms PCL 项目将文件复制到.NET Standard Library项目中,执行clear操作可能会出现如下问题:

    此时把整个解决方案关闭之后重新载入,就会看到.NET Standard Library项目下存在重复的文件名,将排在后面的重名文件remove掉之后就可以了。

  • 如果项目报类似Error CS0103: The name 'InitializeComponent' does not exist in the current context (CS0103)的问题,使用Reveal in Finder打开项目所在文件夹,用文本编辑器打开项目的.csproj文件,添加下列代码:

<ItemGroup>
    <!-- https://bugzilla.xamarin.com/show_bug.cgi?id=55591 -->
    <None Remove = "**\*.xaml" />


    < Compile Update="**\*.xaml.cs" DependentUpon="%(Filename)" />
    <EmbeddedResource Include = "**\*.xaml" SubType="Designer" Generator="MSBuild:UpdateDesignTimeXaml" />
  </ItemGroup>

rebuild项目即可;

  • .NET Standard Library项目无法被PCL项目引用,所以如果要转换到.NET Standard ,则解决方案中的所有PCL项目都可能需要转换;

参考文献

作者:临岁之寒