Vag*_*lov 5 nuget portable-class-library
我正在研究一个可移植的类库,并希望了解NuGet使用的策略,以确定它是否应该使用PCL或特定于平台的库(如果存在).
我构建了一个示例项目,该项目引用了JSON.NET,它支持各种平台以及可移植类库.以下是JSON.NET从NuGet提供的内容:
首先,我创建了一个面向.NET 4.0的库,并使用NuGet添加了对JSON.NET的引用.它添加了对net40库的引用.好吧,我认为这是因为有一个确切的目标平台匹配.然后我针对NET 4.0.3.还引用了net40版本.然后我尝试了Silverlight 5,它与非可移植库之间没有完全匹配.但是选择了一个sl4库.针对Windows Phone 8导致了sl4-windowsphone71库的选择.
因此,只要存在针对目标平台的非便携式兼容库,它就会被优先考虑.对于JSON.NET,仅当PCL被另一个可移植库引用时才会被选中.如果是这样,我很困惑如何解决以下情况:
图书馆A有两个版本:
库B引用A并且有一个版本:
最后,库C引用了A和B,并且有一个版本:
如何引用一个解析为C的lib?由于C直接引用A,它应该得到A的net40.但是由于C也引用了可移植的B,它还应该得到A的可移植版本.因此,必须为C部署库A的portable和net40版本解决其依赖关系.我对么?
更新.我创建了几个测试项目,看起来只要库C包含对非可移植库A的直接引用,这个版本的库将获胜并覆盖A的PCL版本.所以它看起来像这样的场景不允许 - 如果库也间接引用了它的不同(可移植)版本,则库不能直接引用非可移植库.
在决定引用哪个版本的库时,NuGet 将使用可能的“最具体”或“最窄”匹配。
库的可移植版本应该与库的特定于平台的版本兼容。我认为这只是框架不同版本之间兼容性的更一般情况。在您的示例中,将 net40 和 portable 替换为 net45 和 net40。在这种情况下,NuGet 应使用 .NET 4.5 版本的依赖项,但如果您有针对 .NET 4 版本编译的另一个依赖项,则在运行时它具有 .NET 4.5 版本时,它应该可以工作。
为了兼容,库的不同版本应该具有相同的标识(名称、版本号和(如果适用)强名称密钥),并且应该是 API 兼容的,这意味着针对特定平台的库版本应该具有与可在该平台上运行的便携式版本相同的 API(但是,特定于平台的版本可以添加其他 API)。
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |