.net Core 3.1 の NLogではまった… その2

その1:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog.html
その2:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog-2.html
その3:https://deathmarchdaily.blogspot.com/2020/06/net-core-31-nlog-3.html

NLog の サンプルConfig を見ると、大体が ${basedir} を使ってますよね?
私もそれに習って ${basedir} を使ってファイル出力先を指定してました。

さて何が問題なのでしょうか?
答え:EXEをリリースするときに使う「発行」がありますが、この設定で「単一ファイルの作成」 にチェックを付けてEXEを作ると、多量のDLLがなくなり1つのEXEになって便利ですよね。
「さて実行だ! → ログファイルが出ねぇ!」のコンボが発生します。

原因はこれ:
https://rksoftware.hatenablog.com/entry/2019/09/29/155926

どうも「単一ファイルの作成」を作って実行すると、Tmpフォルダに全DLL群を展開後に実行するようです。
(最初の1回目に時間がかかるのは展開処理を行ってるからなんですね…)

で、何が問題かというと、
・${basedir} は Tmp フォルダを指します。
・${currentdir} は Exe フォルダを指します。

結果、${basedir} を使用するとログファイルがTmpフォルダに作成されるため、見つけられなくなります。

というわけで、「単一ファイルの作成」 でEXEを作成する場合、パスは${currentdir} を使う または、「./」を使って相対パスを使う のどちらかです。
覚えておきましょう


ちなみに「その3」も書きます… パスが変わるという事は…勘のいいひとなら想像できると思います。

検索用:.net Core 3.1 発行 単一ファイルの作成 ログ 出ない ファイルが無い ファイルが作られない 出力されない NLog

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ