【问题标题】:"Portable" PCL needing native code – why?“便携式”PCL 需要本机代码——为什么?
【发布时间】:2016-01-19 19:07:57
【问题描述】:

我有一点 C# / .NET 经验,但我对使用可移植类库 (PCL) 和为 Xamarin.iOS 编写代码还很陌生

我的一般理解是 Visual Studio 中的“常规”DLL,它将依赖于 .NET 4.x,它有很多本机依赖项。

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

现在让我感到困惑的是,许多“便携式”库(例如Portable Compression,但还有更多)也需要本机依赖项。

这不会违背 PCL 的目的吗?如果不是,为什么它们被称为“便携式”,它们与常规 IL 程序集有什么区别?

【问题讨论】:

  • Portable 在这种情况下总是带有支持的平台列表。如果本机部分可用于所有这些平台,它仍然适用于此上下文。不过,在现有列表中添加其他平台肯定会变得更加困难。

标签: c# .net portable-class-library


【解决方案1】:

使其“可移植”的原因在于您可以在不同类型的项目中使用该包并编写相同的代码来使用它。 从不可移植的是部署,您使用一种非常不同的方式将您的程序及其库部署到手机和台式机。

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

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

【讨论】:

  • 感谢您的信息。只是我对您的理解正确,您是说这是这些“便携式”库的特殊属性。真正的 PCL 库也应该可以部署到每个平台,只要它们引用的 DLL/类可以解析?
  • 是的。 “引用的 DLL”并不能帮助您理解这一点,引用是托管代码的属性。不同的目标需要不同的本地代码DLL,只需复制正确的即可。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2011-01-12
相关资源
最近更新 更多