为什么Nuget包挑选错误的平台?

时间:2013-12-23 16:00:57

标签: nuget portable-class-library

我有一个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库?

1 个答案:

答案 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程序集更兼容。