"Portable" PCL 需要本机代码 – 为什么?

"Portable" PCL needing native code – why?

我有一点 C# / .NET 经验,但我对使用便携式 Class 库 (PCLs) 和编写代码 Xamarin.iOS

我的一般理解是 'regular' Visual Studio 中的 DLL 将依赖于 .NET 4.x,它具有大量本机依赖项。

相反,所以我认为,PCL 配置文件表示平台提供的 API 的(元)子集,PCLs 以这些配置文件为目标,并且将完全独立于平台。

现在让我感到困惑的是,许多 'portable' 库(例如 Portable Compression,但还有更多)也需要本地依赖项。

这不是违背了 PCL 的目的吗?如果不是,为什么它们被称为 'portable',它们与常规 IL 程序集有什么区别?

它的优点 "portable" 是您可以在不同类型的项目中使用该包并编写相同的代码来使用它。 never 可移植的是部署,您使用一种非常不同的方式将程序及其库部署到 phone 与桌面计算机。

像这样的 Nuget 包总是包含一个 Powershell 脚本,当您添加包时 运行s。他们查看您的项目以了解需要复制哪些 DLL。该软件包通常包括所有这些,但您只会使用其中的一组特定内容。可以在您选择的特定设备上 运行 的那个。这就是博客 post 指出您不能以 AnyCPU 为目标的原因之一,Powershell 脚本需要知道是复制本机 DLL 的 32 位还是 64 位版本。

有关此脚本的更多详细信息以及在 中部署 DLL 的方法。