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

Xamarin.Forms: PCL -> .Net Standard upgrade

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

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

此外,许多 NuGet 包已经切换到支持标准,您将不会在 PCL 库中收到该代码的任何升级。回到安全和性能部分;如果在 NuGet 包中发现错误,您将不会收到包含修复的更新,因为您仍在使用 'older' PCL 技术。这有点牵强,但如果您想面向未来,则必须切换到 .NET Standard。

现在我们有点困难。您不能从 PCL 引用标准,反之亦然(并非 100% 确定所有情况,但我认为您不能)。因此,现在您必须仔细检查您正在使用的所有 NuGet 是否已经具有 .NET Standard 版本。如果没有,如果没有 NuGet 就无法完成,那么您将陷入 PCL。 NuGet 的创建者可以在一个 NuGet 中提供 PCL 和 .NET Standard 版本,这样您就可以从一个转换到另一个。但是看看你正在使用的所有插件是否都是这样。

Adam Pedley here.

对此有一个很好的 post

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

要从 PCL 移动到网络标准:
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" 复制到项目设置(Properties->Package)并删除它,因为您不再需要它了。
4。从 "packages.config" 文件手动安装回 nuget 包并扫描旧的 *.csproj 文件以获取对您项目的引用。也添加它们。然后你也可以删除 "packages.config" 文件。

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