web-dev-qa-db-ja.com

dotnetpackプロジェクトリファレンス

データプロバイダーへのファサード、データプロバイダーの契約、データプロバイダーの実装自体など、いくつかのアセンブリ間で機能を分離するのがとても好きです...私の考えでは、ピースの個々のコンポーネントを単体テストするのは簡単です。機能性が高く、将来的に1つのものを簡単に交換できます(私の例の場合、データプロバイダーを簡単に交換できます)。

3つのプロジェクトでソリューションを作成し、プロジェクト参照を使用する場合、エントリAssemblyでdotnet-buildを実行すると、すべての参照が出力フォルダーにコピーされます。エントリアセンブリプロジェクトをドットネットパックしてNuGETパッケージを作成すると、エントリアセンブリ(コントラクトやデータプロバイダーではない)のみがNuGETパッケージに含まれます。

これは仕様によるもののようです。 documentation for .NET Coredotnet-packは次のように述べています

プロジェクト間の参照は、プロジェクト内にパッケージ化されていません。現在、プロジェクト間の依存関係がある場合は、プロジェクトごとにパッケージが必要です。

私の質問は-なぜこれが当てはまるのですか?コードを論理アセンブリに分割したい場合は、個別のNuGETパッケージを作成してそれらを参照するか、すべてのコードを1つのアセンブリにまとめる必要があります。 NuGETパッケージにプロジェクト参照を含める方法はありますか?

VS2017/.NET Core v1.1(xprojではなくcsproj)を使用しています

18
Jay

必要なものを実現するための可能な方法は、パックしたいdllを指定できるカスタム.nuspecファイルを使用することです。

<PropertyGroup>
    <NuspecFile>App.nuspec</NuspecFile>
</PropertyGroup>

これがあると、dotnet packMyPackage.nuspecに関してパッケージを生成します。

さらに、コントラクトと実装を含む3つのプロジェクトがあり、3つのパッケージ参照を追加したくない場合は、これら3つを依存関係として持つだけのメタパッケージを作成し、その単一のメタパッケージを参照できます。

3
Ivan Zaruba