我正在将xamarin表单pcl转换为.net标准。在项目中,我使用skia sharp和azure mobileservices。
我的理解是,如果我在 .net 标准类库中引用这些库,然后在我的 android/ios/uwp 项目中添加对这个 .net 标准类库的引用,一切都会好起来的。
但是,我似乎需要将skiasharp和azure移动服务的nuget包添加到每个项目(android/io/uwp)中。事实果真如此吗?如果是这样,这比使用 PCL 更好吗?
我让安卓项目工作,但我需要将所有 nuget 包添加到安卓项目中。 我让 uwp 项目在没有任何 nuget 包的情况下工作,这让我更加困惑。
使用 PCL 和 .NET Standard 基本上是相同的 - 两者都只是 API 合约或完整 .NET Framework 的子集。但是.NET Standard有一个主要的优势:.NET Standard有更多的API - 特别是如果你使用1.3+(netstandard1.3具有PCL中不可用的 System.IO API)。
对于 NuGet,通常仍需要在所有应用项目中引用 NuGet 包,因为某些平台具有不同的实现来利用平台功能。将.NET Standard视为所有平台API的子集 - 这就是为什么SkiaSharp适用于某些平台的原因。但是,Android 和 iOS 具有不同的实现来利用平台功能。
虽然你没有直接进行Android开发(因为你使用的是Xamarin.Forms),但你不会注意到一些东西。如果您只包含.NET Standard包,则可以获得基本的SkiaSharp,例如,可以在Xamarin.Forms颜色和SkiaSharp颜色之间进行转换。但是,由于在Android应用程序中包含软件包,您还可以从Android颜色转换为SkiaSharp颜色。
就个人而言,为了安全起见,我总是将所有NuGets包含在应用程序项目中。
以下是一些可能对您有所帮助的文档: https://learn.microsoft.com/en-us/dotnet/standard/net-standard