如何将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项目都可能需要转换;
参考文献
- 原文作者:岁寒
- 原文链接:http://www.suihanime.com/post/Xamarin/%E5%A6%82%E4%BD%95%E5%B0%86PCL%E9%A1%B9%E7%9B%AE%E8%BD%AC%E6%8D%A2%E6%88%90.Net-Standard%E9%A1%B9%E7%9B%AE/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。