2017-08-10 76 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屬性是要使用的。