2013-12-23 45 views
3

我有一个NuGet包http://www.nuget.org/packages/Tavis.UriTemplates/具有以下nuspec文件,为什么Nuget包选错了平台?

<?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

您的nuspec不应该有不同的框架文件,如:

+0

@JonDouglas我试图避免必须使用链接文件构建shell项目,以便我可以支持.net 40和.net 45。如果我仍然需要为所有完整框架构建单独的DLL,似乎可以击败PCL库。 –

回答

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方法的返回值,由两个师,使.NET 3.5组件更兼容。

+0

感谢您的源代码指针。这非常有趣。看起来很痛苦,不得不创建两个带有链接文件的新项目,只是为了处理这个零分割。我需要.net 3.5,因为Glimpse需要支持.net 3.5 –

+0

我可以将便携式DLL粘贴到net40和net45文件夹,还是实际上必须构建.net 40和.net 45版本? –

+0

是的,在这两个文件夹中使用可移植的DLL应该可以工作。 –

相关问题