如何将PCL项目转换成.Net Standard项目
从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项目都可能需要转换;