これは、それを行う方法についてしばらく戸惑いました。私は当初、ロギングを構成するカスタム WebProxy を作成し、それをdefaultProxy構成要素を使用してメイン アプリケーションにロードすることで実現できると考えていました。ただし、これには、コードが必要な場合 (この場合は HTTP 要求が使用される場合) にのみ実行されるという点で、他の構成の提案と同じ問題があり、元のアプリケーションを変更する必要があります。
アプローチを逆にすることでそれを達成しました。元のアプリケーションでログを構成する代わりに、ログを構成してから元のアプリケーションを起動するアプリケーションのスタブを作成できます。
例として:
Forms.exe
エントリポイントが次のように定義されている WinForms アプリケーションがあります。
[STAThread]
internal static void Main()
{
Application.Run(new MainForm());
}
私のスタブ アプリケーション (コンソール アプリケーションとして持っている) で、ログを構成し、ロードして実行しますForms.exe
。
internal static void Main()
{
ConfigureLogging()
Assembly app = Assembly.LoadFrom(@".\Forms.exe");
app.EntryPoint.Invoke(null, null);
}
これは、リフレクションを使用して、ロギングを構成するアプリケーションに他のアプリケーションをロードします。
警告:
- この方法でロードするには、他のアプリケーションが .Net アプリケーションである必要があります。
- Reflector を使用して他のアプリケーションを検査し、エントリ ポイントに渡す正しい引数を見つける必要がある場合があります (つまり、引数としてa ではなく
string[] args
空を渡す必要がある場合があります) 。string[]
null
- 元のアプリケーションのコンソール ウィンドウは、他のアプリケーションの実行中にハングアップします (これはおそらく問題ではありませんが、問題がある場合はFreeConsoleを使用して非表示にすることができます) 。