概要
Visual Studioでとあるプロジェクトをビルドした際に、Negetを使用して参照しているdllについて「bin」フォルダにコピーされないように設定したかったのですが、意外?と情報が少なかったので備忘録として残します。
※Visual Studio2019を使用しています。
やりたいこと
基本的に概要の通りです。
Visual Studioのソリューションエクスプローラーからプロジェクトの「参照」のプルダウンを押下すると、参照しているdllが表示されると思います。
この時、通常はdll名の左部に以下のようなアイコンがあり、この場合はdll名を右クリックしてプロパティからローカルにコピーを「false」に設定することができると思います。
ただし、恐らくNugetから参照したdllは以下のようなアイコンになり、このアイコンのdllは右クリックからのプロパティでも「ローカルにコピー」という項目がありませんでした。
なのでそのプロジェクトをビルドすると、binフォルダにはNugetで参照しているdllが格納されていました。そのdllについて、ビルド時にbinフォルダにコピーしないようにする、という方法です。
方法
① Nugetを使用した参照を行っている該当のプロジェクトファイル (拡張子が.csproj) をテキストエディタ等で開きます。
② テキストエディタの検索機能からNugetで取得したdll名で検索すると、下記のようにPackageReference要素のInclude属性の値で引っかかるかと思います。
<PackageReference Include="Nugetで取得したdll名">
<Version>x.x.x</Version>
</PackageReference>
③ ここのPackageReference要素の子要素に、<ExcludeAssets>runtime</ExcludeAssets>
という定義を追加します。
<PackageReference Include="Nugetで取得したdll名">
<Version>x.x.x</Version>
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
これで恐らく、ローカルにコピーを「false」にした時と似たような挙動になると思います。
- ExcludeAssets要素はコンテンツに定義した値をもとに、その条件でNuGetパッケージの特定のアセット (資産) を除外できる設定らしいです。
- 詳しいことはわからないのですが、こちらのWebページで以下のようなことが記載されていました。
PackageReference で ExcludeAssets="runtime" を設定することは、参照で CopyLocal を false に設定することと似ています。DLLごとではありませんが、基本的に同じことを行います。また、私が知る限り、UIには公開されていません-プロジェクトファイルを編集する必要があります。
参考: