12

特定のDLLでログを記録するためにNlogを使用しました。 DLLは別のアプリケーションで使用されます(System.Reflection.Assembly.LoadFrom(path + a.dll)を使用して動的にロードされます)。私は手動でNlog.dllとNlog.configファイルをPathフォルダに配置し、アプリケーションは正しく実行されますが、メッセージは記録されません。NLog.configファイルを " bin debug "ではなく(d: dev)から読み込みます。

しかし、Nlog.configファイルをアプリケーションディレクトリ(\bin\debug\)に手動で配置すると、ログメッセージが表示されます。

Nlog.Configの検索場所を\bin\debug\以外の別のディレクトリ(d:\dev)にポイントする方法を教えてもらえますか?

答えて

31

以下は、Nlogの設定を、Executing AssemblyのフォルダにあるNlog.configファイルを指すように変更した方法です。

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(assemblyFolder + "\\NLog.config", true); 
+1

Path.Combine(assemblyFolder、 "NLog.config")を使用すると、 – Tempeck

0

NLog設定は、a.dllを動的にプルするアプリケーションが実行されているフォルダに存在する必要があります。 デバッグしている場合、bin \ debugに入れると動作します。 Visual Studioを使用している場合は、nlog.configを「常にコピーする」に設定してください。必要な場所に移動してください。

+0

返信@jimありがとうございます。私はNlog.configを 'Copy Always'をアプリケーションXのプロジェクト 'a'に設定し、アプリケーションXの '\ bin \ debug \'フォルダにコピーします。しかし、私は全く新しいアプリケーションでa.dllを使用しています(Y)とアプリYの 'bin/debug'に行きたい、または 'd:\ dev'フォルダ内でNlog.configが参照されるように変更したい場合 –

5

NLog wikiのConfiguration file locationsを参照してください。

基本的にNLogは設定を見つけ方法は次のとおりです。アプリケーションの中

  • 標準アプリケーション構成ファイル(通常はapplicationname.exe.config)
  • アプリケーションのディレクトリにapplicationname.exe.nlog
  • NLog.configディレクトリ
  • NLog.dllがあるディレクトリのNLog.dll.nlog(NLogがGACに存在しない場合のみ)
  • NLOG_GLOBAL_CONFIG_FILEが指すファイル名環境変数(定義されている場合、NLog 1.0のみ - NLog 2.0ではサポートが削除されました)

これを行う方法は他にありません。

+1

*これを行う方法は* ](http://stackoverflow.com/a/16062987/11635) –

2

私は

NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(logFilePath, true); 

が実際に記録されるファイルではなく、設定ファイルにロガーを指していることが分かりました。 XLLは、ビットストリームとして動的にアセンブリをロードするようExcelDNAなどを使用している場合、これは特に有用であり、そう

Assembly.GetExecutingAssembly().Location 

- これについての素晴らしいところは、あなたがExecutingAssemblyを知らなくても、ログファイルのパスを定義することができるということです例外がスローされます。

関連する問題