【问题标题】:Xamarin.Forms: PCL -> .Net Standard upgradeXamarin.Forms:PCL -> .Net 标准升级
【发布时间】:2018-01-01 09:57:46
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 从 PCL 升级到 .NET Standard 时是否会出现任何限制或例外情况?
    • 如果“nuget 包”还不支持 .Net 标准怎么办?这是否意味着您将无法使用该软件包?
    • 谢谢@Gerald。这篇博文还解释了upgrading or creating Xamarin.Forms Apps with .NET Standard
    • 谢谢!如果它帮助@Pablo,请接受它
    【解决方案2】:

    实际上,您可以从 .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”中的信息复制到项目设置(Properties->Package)并删除它,因为您不再需要它。
    4。从“packages.config”文件手动安装 nuget 包并扫描旧的 *.csproj 文件以获取对您项目的引用。也添加它们。然后你也可以删除“packages.config”文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 2020-12-26
      相关资源
      最近更新 更多