none
.NET Core3.0でPublishSingleFileを利用したときの実行ファイルがあるディレクトリを取得する方法はありますか? RRS feed

  • 質問

  • .NET Core3.0 Preview6にてPublishSingleFileを使用してプログラムを書いてみたところ,生じた疑問です.

    実行ファイルが置かれたディレクトリに設定ファイルやリソースを配置することがあり,ディレクトリパスの取得を行いたいと考えました.

    これまではSystem.Reflection.Assembly.GetExecutingAssembly().Locationから取得していたのですが,PublishSingleFileを使用するとruntimeごとtmpディレクトリに展開されるため,指し示されるディレクトリパスが異なってしまいます.同様の現象が起きるため,Environment.CommandLineを使用することもできません.

    また,Environment.CurrentDirectoryを使用する事で対応することはできますが,この場合ショートカットやエイリアス経由で起動されるとディレクトリ位置が異なってしまい,状況に依存せずに取得をする方法が現在のところ思いつかないような状況です.

    今後のアップデートでこれは対応されるものなのか,それとも既に方法が存在しているのかご存知の方はいらっしゃいますでしょうか?

    2019年6月21日 15:33

すべての返信

  • 少なくとも Design には書かれていませんね。
    必要であれば、Feedback 出しておいた方が良いかもしれません。
    2019年6月22日 0:04
    モデレータ
  • This scheme doesn't provide an obvious mechanism to access the contents of the extraction directory -- by design. The recommended method for accessing content files from the bundle are:

    • Do not bundle application data files into the single-exe; instead them next to the bundle. This way, the application binary is a single-file, but not the whole application.
    • Embed data files as managed resources into application binary, and access them via resource management APIs.

    この辺りでしょうか。single fileなのに他のファイルにアクセスしようとしているのが間違っているというスタンスで、必要ならアセンブリに他のファイルもリソースとして含めたら、と。

    2019年6月22日 2:03
  • System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName はどうでしょうか?

    2019年8月1日 8:31