deps.jsonファイルは何者か?消していいか?

やりたいこと

.net6環境で、自分のアプリ(exe)やライブラリ(dll)をビルドすると、 xxxxx.deps.jsonというファイルができてくる。

これは何のファイルなのか?もしいらないファイルなら消したいが、消してよいのか?を調べてみた。

結論

ライブラリ(dll)ビルドで出来るライブラリ名.deps.jsonは、消してOK。

アプリ(exe)ビルドで出来るアプリ名.deps.jsonは消してはいけない。消すとexeが動かなくなる。

そもそも「アプリ名.deps.json」とは何か?

  • .netのアプリが動くときに、アプリホスト(ビルドしてできるアプリ名.exe)がどういう環境で動くか、 どういう依存ファイルを使うか、を知るためのファイル。

  • .net6アプリをビルドすると、下記のようなものができる。

    • アプリ名.exe:
      アプリホスト。apphost.exeというファイルをコピーしたものらしい。
    • アプリ名.dll:
      実はアプリ本体。アプリ名.exeがこいつを実行してる感じ。
    • アプリ名.deps.json
      アプリホストがどういう環境で動くか、どういう依存ファイルを使うかが書かれてる。
  • exeをビルドしても、dllをビルドしても、deps.jsonは作成される。

  • ただし、exeから参照しているdllのdeps.jsonは、exeをビルドしたときにexeの出力先にはコピーされない。
    なので、「ライブラリ名.deps.json」は、ライブラリのdllを使うexeからは使われないので、消してもOK。
    (dllは、そいつを読み込んだexeが動いてる環境で動くから、dll側のdeps.jsonはいらないということか)

  • exeビルドで生成されるdeps.jsonを削除すると、exeが起動しなくなる。
    その場合、イベントログに、エラーが残ってる。
    なので、exeと一緒に生成されるdeps.jsonは、消してはいけない。

参考

公式情報。
ふわっとそうなんだとわかるが、詳しくは消したり書き換えたりいろいろ実験しないといるのかいらないのか結局わからなかった...

https://github.com/dotnet/sdk/blob/main/documentation/specs/runtime-configuration-file.md