Xamarin.Forms:PCL - > .Net标准升级

时间:2017-07-26 08:00:11

标签: xamarin.forms portable-class-library .net-standard

我的应用程序差不多完成了。我正在使用Xamarin.Forms(共享代码的PCL项目)。将PCL切换到.Net Strandard有什么好处吗?我已经阅读了一些文章,但仍然不能100%确定升级是否有任何好处,例如:安全性,性能还是更像是更丰富的API?谢谢你的任何想法。

2 个答案:

答案 0 :(得分:2)

安全性或性能没有直接改善,但.NET Standard将及时取代PCL。 PCL并不像标准版那样跨平台,因此为了使其真正跨平台,切换到标准版是明智之举。

此外,许多NuGet软件包已经切换到支持Standard,并且您不会在PCL库中收到该代码的任何升级。所以回到安全和性能部分;如果在NuGet包中发现错误,您将不会收到包含修复的更新,因为您仍然使用“较旧”的PCL技术。这有点紧张,但如果您希望面向未来,则必须切换到.NET Standard。

现在我们有点发脾气。您不能从PCL引用标准,反之亦然(在所有情况下都不是100%确定,但我认为您不能)。因此,现在您必须仔细检查您使用的所有NuGets是否已经具有.NET标准版本。如果没有,如果你不能在没有NuGet的情况下做到这一点,你就会被困在PCL上。 NuGet的创建者可以在一个NuGet中提供PCL和.NET标准版本,因此您可以从一个转换到另一个。但是看看你使用的所有插件是否都是这样。

Adam Pedley here实际上有一篇很好的帖子。

答案 1 :(得分:0)

实际上,您可以从.netstandard引用PCL,反之亦然,但这取决于netstandard版本和PCL配置文件。请参阅this table,以了解您所遇到的情况。

要从PCL转到netstandard,请执行以下操作:
1。用以下内容替换* .csproj内容:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.1</TargetFramework>
    <PackageTargetFallback>$(PackageTargetFallback);portable45-net45+win81+wpa8</PackageTargetFallback>
    <Copyright>Copyright ©  2018</Copyright>
  </PropertyGroup>
  <ItemGroup>
    <Folder Include="Properties\" />
  </ItemGroup>
</Project>


2。如果要添加对PCL库的引用,则可以添加PackageTargetFallback标记。您也可以编辑所需的值。在上面的示例中,我使用“ portable45-net45 + win81 + wpa8”在netstandard1.1库中添加PCL(Profile111)。
3。使用网络标准版本you need。将信息从“ AssemblyInfo.cs”复制到项目设置(“属性”->“包装”),然后将其删除,因为您不再需要它。
4。从“ packages.config”文件中手动安装回退nuget软件包,并扫描旧的* .csproj文件以获取对您的项目的引用。也添加它们。然后,您也可以删除“ packages.config”文件。

我在VS2017 15.7.5上尝试过。我发现如果为Xamarin.Forms(Android + iOS)开发,最好使用netstandard1.1和profile111。在这种情况下,您仍然可以使用旧的.NETPortable nuget软件包(即使它们尚不支持netstandard)。