【发布时间】:2018-01-01 09:57:46
【问题描述】:
我的应用程序即将完成。我正在使用 Xamarin.Forms(共享代码的 PCL 项目)。将 PCL 切换到 .Net Strandard 有什么好处吗?我已经阅读了一些文章,但仍然不能 100% 确定升级是否有任何好处,例如安全性,性能还是更像是更丰富的 API?感谢您的任何想法。
【问题讨论】:
标签: xamarin.forms portable-class-library .net-standard
我的应用程序即将完成。我正在使用 Xamarin.Forms(共享代码的 PCL 项目)。将 PCL 切换到 .Net Strandard 有什么好处吗?我已经阅读了一些文章,但仍然不能 100% 确定升级是否有任何好处,例如安全性,性能还是更像是更丰富的 API?感谢您的任何想法。
【问题讨论】:
标签: xamarin.forms portable-class-library .net-standard
在安全性或性能方面没有直接的改进,但 .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 有一篇很好的帖子。
【讨论】:
实际上,您可以从 .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)。
【讨论】: