2016-07-23 58 views
4

我更新了配置文件259到.NET Standard 1.0的PCL,並且想要相應地更新相應的NuGet包。我將包含實際DLL的文件夾從portable-net45+win8+wp8+wpa81更改爲netstandard1.0,但我不太確定如何構建包的依賴關係。如何正確構造netstandard1.0 NuGet包的依賴關係?

如果我使用.NET的核心CLI來創建一個包(dotnet pack),在nuspec文件的依賴關係部分只是看起來是這樣的:

<dependencies> 
    <group targetFramework="netstandard1.0"> 
    <dependency id="NETStandard.Library" version="1.6.0" /> 
    </group> 
</dependencies> 

然而,當我這個包安裝到一個經典之作。 NET 4.5或仍使用packages.config PCL項目,那麼這個文件被「污染」從NETStandard.Library元數據包的所有依賴關係,就像這樣:

"polluted packages.config file containing all the dependencies from NETStandard.Library 1.6.0

  1. 這不應該被避免嗎?一種方法是在nuspec文件as suggested by Oren Novotny on the GitHub page of NuSpec.ReferenceGenerator中創建空的依賴關係組。但是,他自己在one of his recent blog posts中不贊成這一點。
  2. 我應該瞄準整個NETStandard.Library元包或者只是我實際需要的包?是不是.NET Standard/.NET Core可以輕鬆在支持包的依賴關係的所有平臺上運行?

不幸的是,帶有.NET Core/.NET Standard的NuGet包的official documentation尚未編寫。

回答

4

我不得不解決這個問題,我維護的目標都是.NET Core和.NET 4.5。這種方法我用你的問題的兩個點觸摸:

  1. 在project.json,分裂依賴性起來netstandard1.Xnet45之間。最初,使用NETStandard.Library metapackage使前者變得容易。
  2. NETStandard.Library替換爲我實際需要的特定軟件包的引用。

在第一步中,我project.json看起來是這樣的:

{ 
    "dependencies": { 
     "MyOtherLibrary": "1.0.0" 
    }, 
    "frameworks": { 
     "net45": { 
     "frameworkAssemblies": { 
      "System.Collections":"4.0.0.0" 
     } 
     }, 
     "netstandard1.3": { 
     "dependencies": { 
      "NETStandard.Library": "1.6.0" 
     } 
     } 
    } 
} 

任何依賴關係本身已經有兩種框架兼容進去dependencies,而具體的.NET的核心,或者.NET 4.5依賴關係根據需要進入各自的部分。

隨着dotnet pack,這將產生正是我需要的:一個.nupkg,可以安裝在任何類型的項目,並僅在它需要在該框架拉。

在第二步中,我換出NETStandard.Library與我實際需要.NET核心的幾個包:

{ 
    "dependencies": { 
     "MyOtherLibrary": "1.0.0" 
    }, 
    "frameworks": { 
     "net45": { 
     "frameworkAssemblies": { 
      "System.Collections":"4.0.0.0" 
     } 
     }, 
     "netstandard1.3": { 
     "dependencies": { 
      "System.Threading.Tasks": "4.0.11", 
      "System.Net.Http": "4.1.0" 
     } 
     } 
    } 
} 

這第二個步驟是沒有必要的,但它是很好的產生具有最小的依賴包爲這兩個平臺。 NETStandard.Library在開發階段非常有用,當你不太清楚你需要在覈心API中使用什麼。

相關問題