2017-08-10 124 views
0

我对NuGet真的很陌生,对它有各种各样的麻烦。所以最近的问题是我生成了一堆.nupkg文件,并将它们放在网络上的共享文件夹中,然后设置NuGet以查找更新。因此,让我们我的文件夹中说:NuGet newbie mayhem

Author.library.2.1.0.nupkg 
Author.library.2.2.0.nupkg 
Author.library.2.2.1.nupkg 

然后我发现了目标框架(.NET)是我的一些项目的不同(同一解决方案下),所以我产生新的软件包为每个目标:

Author.library.net40.2.1.0.nupkg 
Author.library.net40.2.2.0.nupkg 
Author.library.net40.2.2.1.nupkg 
Author.library.net45.2.1.0.nupkg 
Author.library.net45.2.2.0.nupkg 
Author.library.net45.2.2.1.nupkg 

接下来,我右键点击解决方案,并选择了管理的NuGet的解决方案包,然后去网上,指着安装的软件包,并能够以每包安装适用的项目(.csproj的文件) 。但是现在,当我打开解决方案的NuGet Package Manager并单击Installed Packages时,我所看到的只是库的一个实例。如果我点击它,在右边我可以看到它指向了Author.library.net45包,但我无法看到该库的.net40版本。所以我不能将它添加到.40项目中。

最后,如果我想让一些项目指向一个早期版本的包,该怎么办。我知道我想是能够指定在packages.config文件:

<?xml version="1.0" encoding="utf-8"?> 
    <packages> 
    <package id="Author.Library" version="2.2.0" allowedVersions=" 
    [2.0.0,2.3.0)" targetFramework="net45" /> 
</packages> 

应通过2.3) 或

<package id="Author.Library" version="(,2.4.0" targetFramework="net45" /> 

加载高于一切(含)2.0即应加载低于2.4的任何版本。

所以我的主要问题是为什么我不能在NuGet Package Manager中看到这两个版本的软件包?而且,我如何最好地限制适用于特定库的版本。

回答

0

看起来你看不到不同的包装,因为它们都有相同的包装编号Author.Library。这是基于你在packages.config文件中显示的内容。

另外,我不会单独的NuGet包,只是针对不同框架的程序集。取而代之的是把它们放在它们自己的lib目录中的一个NuGet包中(例如lib/net40 lib/net45)。你可以在同一个NuGet包中有多个程序集针对不同的框架。在将NuGet软件包安装到项目中时,NuGet将选择最佳匹配。另请注意,由于程序集兼容,因此可以使用包含.NET 4.0程序集的NuGet程序包以及.NET 4.5项目。

如果要限制项目可以更新的NuGet包,packages.config文件中的allowedVersions属性是要使用的。