かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

新しい csproj 形式で NuGet パッケージに外部 dll を含める方法

Livet を新しい csproj 形式に移行した後に苦労したのが、Windows API Code Pack の dll を LivetExtensions のパッケージに含めたいというものでした。 わかってしまえば簡単で、dll をプロジェクトに含めて Pack="true" PackagePath="lib\net452" の属性でパッケージに含めることと、含める先のパスを指定する感じでした。

公式ドキュメント内での記述はみつけられませんでしたが、以下のドキュメント内でライセンスファイルを含めるという部分で同じようなことをしてます。

docs.microsoft.com

知ったきっかけ

Prism.Wpf が Blend SDK が手に入りにくくなった昨今、どうやってるのか確認したら、この方法でやってました。該当部分はここ。

Prism/Prism.Wpf.csproj at fdf163566601057f6d3c2c47b08f462de62fec48 · PrismLibrary/Prism · GitHub

ということで、Livet でも同じように対応しました。

Livet/LivetCask.Extensions.csproj at ddcc651b6a8c677ddf90b9af837107e07a07e613 · runceel/Livet · GitHub

<ItemGroup>
  <Content Include="..\ReferenceAssemblies\Microsoft.WindowsAPICodePack.dll" Pack="true" PackagePath="lib\net452" />
  <Content Include="..\ReferenceAssemblies\Microsoft.WindowsAPICodePack.Shell.dll" Pack="true" PackagePath="lib\net452"/>
  <Content Include="..\ReferenceAssemblies\Microsoft.WindowsAPICodePack.dll" Pack="true" PackagePath="lib\netcoreapp3.0" />
  <Content Include="..\ReferenceAssemblies\Microsoft.WindowsAPICodePack.Shell.dll" Pack="true" PackagePath="lib\netcoreapp3.0"/>
</ItemGroup>