強制パッケージ規則に関するNuGet ドキュメントでは、次のように説明されています。
NuGet は、単一のライブラリ フォルダーからのみアセンブリをコピーします。たとえば、パッケージに次のフォルダー構造があるとします。
\lib \Net20 \MyAssembly.dll (v1.0) \MyAssembly.Core.dll (v1.0) \Net40 \MyAssembly.dll (v2.0)
.NET Framework 4 を対象とするプロジェクトにパッケージをインストールすると、インストールされるアセンブリは MyAssembly.dll (v2.0) だけになります。MyAssembly.Core.dll (v1.0) がインストールされていません。(NuGet がこのように動作する理由の 1 つは、MyAssembly.Core が MyAssembly のバージョン 2.0 にマージされた可能性があるためです)。
この例では、MyAssembly.Core.dll を .NET Framework 4 を対象とするプロジェクトにインストールする場合、それを Net20 フォルダーだけでなく Net40 フォルダーにも含める必要があります。
1 つのフォルダーからのみアセンブリをコピーするという規則は、ルート lib フォルダーにも適用されます。パッケージに次のフォルダー構造があるとします。
\lib \MyAssembly.dll (v1.0) \MyAssembly.Core.dll (v1.0) \Net40 \MyAssembly.dll (v2.0)
.NET Framework 2.0 と .NET Framework 3.5 を対象とするプロジェクトでは、NuGet は MyAssembly.dll と MyAssembly.Core.dll の両方をコピーします。ただし、前の例と同様に、.NET Framework 4 を対象とするプロジェクトでは、*Net40 フォルダーの *MyAssembly.dll のみがコピーされます。
そのため、2 番目の例では、パッケージを .NET 3.5 プロジェクトにロードするときに何が起こるかについて説明します。
残念ながら、最初の例ではこの情報が欠落しています。最初の例で示した NuGet パッケージから .NET 3.5 プロジェクトが取得するファイルは何ですか? .NET 3.5 プロジェクトは単純にファイルを取得しないのでしょうか、それともターゲット プロジェクトで後方互換性によってサポートされている最高のフレームワーク バージョンを対象とするライブラリを取得するのでしょうか (.NET 3.5 プロジェクトの場合、これはライブラリの .NET 2.0 バージョンを意味します)。
私がこの質問に興味を持った理由には、2 つの具体的な意味があります。.NET 2.0 バージョン (2.0 から 4.6 までのすべての .NET Framework バージョンで使用する必要があります) をコンパイルしたアセンブリを提供しているとします。 NET 4.6.1 バージョン (.NET 4.6.1 以降で使用されることを意図した、.NET 4.6.1 で導入されたいくつかの新しい BCL API を使用)。
1)ファイルで2つの「キー」バージョンを宣言するだけでいいですか.nuspec
:
<file src="net20\MyLibrary.dll" target="lib\Net20"/>
<file src="net461\MyLibrary.dll" target="lib\Net461"/>
または、サポートされているすべての中間バージョンをリストする必要がありますか?
<file src="net20\MyLibrary.dll" target="lib\Net20"/>
<file src="net20\MyLibrary.dll" target="lib\Net35"/>
<file src="net20\MyLibrary.dll" target="lib\Net40"/>
<file src="net20\MyLibrary.dll" target="lib\Net403"/>
<file src="net20\MyLibrary.dll" target="lib\Net45"/>
<file src="net20\MyLibrary.dll" target="lib\Net451"/>
<file src="net20\MyLibrary.dll" target="lib\Net452"/>
<file src="net20\MyLibrary.dll" target="lib\Net46"/>
<file src="net461\MyLibrary.dll" target="lib\Net461"/>
? 1
2) 同様に、このパッケージを公開したら、フレームワークの将来のバージョンで動作するか、.NET 4.6.2、4.6.3、4.7、または一般的には、パッケージを更新する必要がありますか? .NET 4.6.1 よりも大きいものはありますか?
1つだけ質問していることに注意してください。その重要性を説明するために、3 つの異なる方法で書き留めただけです。
1 : この列挙は、執筆時点でサポートされているターゲット フレームワークのリストに基づいています。さらに、.NET 1.1 (およびその他のフレームワーク) をサポートしたくないことに注意してください。したがって、lib
上記のドキュメントの 2 番目の例に示されているように、フォルダーにライブラリを直接追加したくありません。