我有一个nuget包http://www.nuget.org/packages/Tavis.UriTemplates/,它包含以下nuspec文件,
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Tavis.UriTemplates</id>
<version>0.4</version>
<authors>Darrel Miller</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<title>URI Template resolution library</title>
<description>Implementation of RFC 6570</description>
<tags>http</tags>
<releaseNotes>Added PCL version</releaseNotes>
<projectUrl>https://github.com/tavis-software/UriTemplates</projectUrl>
</metadata>
<files>
<file src="Packages\temp\UriTemplates\lib\Net35\*.*" target="lib\Net35" />
<file src="Packages\temp\UriTemplates\lib\portable\*.*" target="lib\Portable-Net40+WinRT45+WP71+sl4" />
</files>
</package>
如果我在.net40或.net45项目中安装此软件包,则会选择.net 35 DLL。任何人都知道它为什么不选择PCL库?
答案 0 :(得分:3)
NuGet将PCL程序集视为与针对特定版本.NET框架的程序集不兼容。
对于NuGet包,您可以添加.NET 4.0和.NET 4.5程序集,也可以删除.NET 3.5程序集。
查看NuGet source code,在VersionUtility类中,与引用完整版.NET的程序集相比,PCL程序集的权重将减半。
// we divide by 2 to ensure Portable framework has less compatibility value than specific framework.
return GetCompatibilityBetweenPortableLibraryAndNonPortableLibrary(projectFrameworkName, packageTargetFrameworkName) / 2;
使用NuGet包,即使PCL程序集的兼容性基于GetCompatibilityBetweenPortableLibraryAndNonPortableLibrary方法返回的值更高,但除以2使得.NET 3.5程序集更兼容。