私はWinFormsアプリケーションを書いています。情報をファイルに記録する必要があります。通常、ログにはlog4netを使用しますが、制限により参照を追加できません。単一の実行可能ファイルをデプロイする必要があるため、プロジェクトに外部参照を追加できません。
.NETに組み込みのログ フレームワークがあるので、外部 dll を追加せずにファイルにログインできますか?
PS: もちろん、ストリームを開いて手動で書き込みたくありません。
はい、System.Diagnostics.TraceListenerクラスです。動作させるには TRACE 定数を定義する必要がありますが、app.config の構成を通じて、組み込みの多くの tracelistener を使用できます。
ファイルに書き込みたい場合、app.config は次のようになります。追加できるフィルタが多数あります。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="yourName" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\mylogfile.txt" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
そして使用法:
Trace.TraceError("There's been an error captain: {0}", e);
Trace.TraceWarning("The system broke but don't worry.");
Trace.TraceInformation("Starting up the engines.");
個人的には、回避できるのであればテキスト ファイルには書き込みません。イベント ログは、並べ替え、フィルター処理が可能で、ログは自動パージされ、ファイル ロックの問題が発生しないため、より適切な場所です。
システム トレース コールを使用することもできますが、log4net のような適切なログ フレームワークの代わりにはなりません。
http://msdn.microsoft.com/en-us/library/system.diagnostics.trace.aspx
別の、おそらくより柔軟な長期的なアプローチは、すべてをコンパイルした後、ILMerge を使用してすべての外部 DLL を単一の実行可能ファイルに結合することです。
http://www.microsoft.com/en-us/download/details.aspx?id=17630
または、「単一の実行可能ファイル」の定義に応じて、もちろんすべてを MSI または clickonce パッケージとしてパッケージ化します。