创建可移植类库的原因(在体系结构意义上)



有很多关于PCL的文章是这样的。

然而,从我发现的所有情况来看,他们大多只是说这样的话:

可移植库工具 CTP 添加了一个新的"可移植类库" 可用于创建类的 Visual Studio 项目模板 C# 和 VB 中的库,在各种 .NET 平台上运行,没有 重新 编译。

但是仔细阅读了这个关于.NET(和Mono)如何工作的精湛解释,我变得更加不清楚为什么需要PCL。

因为如果我构建了一些程序集并且它包含 CIL 字节码可以通过任何其他平台使用(如果相应的平台具有 CLR 实现(如 .NET 的主要思想)),那么问题是什么?那么为什么我们还需要 PCL?

尽管 IL 可能相同,但可用的库不是。如果要面向台式计算机、Windows 8 应用和 Silverlight,则需要确保代码使用所有这些位置实际存在的内容。

可移植类库确保仅使用适用于所选平台的库集。

您可能希望阅读大约一年前的此.Net Framework博客上的更多详细信息。

如前所述,PCL 强制你仅使用目标所有平台上存在的 API。

此外,字节码是"可移植的",但 .NET 程序集包含对其他程序集的引用,并且在 PCL 支持出现之前,对 .NET Framework API 的引用跨平台使用不同的程序集标识。 IE,对 .NET Framework 版本的 System.dll 的引用将具有与 Windows Phone 或 Silverlight 不同的版本号和强名称密钥。 最重要的是,对于某些API(例如ICommand和HttpWebRequest),程序集的简单名称甚至不一样。 因此,您无法创建可移植到多个平台的程序集。

有关一些信息,请参阅我的回答:https://stackoverflow.com/a/16349673/1509

最新更新