2016-07-23 4 views
4

プロファイル259を使用してPCLを.NET Standard 1.0にアップデートし、それに応じて対応するNuGetパッケージを更新したいと考えています。私は実際のDLLを含むフォルダをportable-net45+win8+wp8+wpa81からnetstandard1.0に変更しましたが、どのようにしてパッケージの依存関係を構造化するのかはわかりませんnetstandard1.0 NuGetパッケージの依存関係を正しく構造化する方法は?

私はパッケージ(dotnet pack)を作成するために、.NETのコアCLIを使用している場合は、nuspecファイルに依存関係セクションは、単純に次のようになります。

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

しかし、私は古典的には、このパッケージをインストールするとき。

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

    :NET 4.5または静止packages.configを使用してPCLプロジェクトでは、このファイルは NETStandard.Libraryメタパッケージからすべての依存関係、そのように「汚染」を取得します
  1. これは避けてください。これを行う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の両方を対象にしているパッケージでこの問題を解決しなければなりませんでした。私はあなたの質問の両方のポイントにタッチを使用したアプローチ:project.jsonで

  1. は、netstandard1.Xnet45間の依存関係を分割しました。最初は、NETStandard.Libraryメタパッケージを使用して、前者のターゲット設定を簡単にします。
  2. NETStandard.Libraryを、私が実際に必要とする特定のパッケージへの参照に置き換えてください。最初のステップで

は、私のproject.jsonは次のようになります、それ自体がすでにdependenciesに行くのいずれかのフレームワークと互換性があり

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

任意の依存関係を特定.NET Coreまたは.NET 4.5ながら、依存関係は必要に応じてそれぞれのセクションに入ります。

dotnet packとすると、どちらのタイプのプロジェクトにもインストールでき、そのフレームワークに必要なものだけを取り込むことができる、単一の.nupkgが生成されます。第2ステップで

、私は実際に.NETのコアのために必要ないくつかのパッケージでNETStandard.Libraryをスワップアウト:

{ 
    "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で何を使用する必要があるかわからない開発段階で役立ちます。

関連する問題