2

複数のアプリケーションに単一のapp.configファイルがある場合、ロックの問題が発生する可能性はありますか?

config = ConfigurationManager.OpenExeConfiguration(Path.Combine("C:\test\root", "Master.exe"));
string logpath = config.AppSettings.Settings["Log.Path"].Value;
4

2 に答える 2

1

App.configsは読み取り専用であり、アプリケーション発行元が新しいバージョンを公開しない限り変更しないでください。ユーザー構成設定は、app.configではなくuser.configファイルに保存されます。このuser.configファイルがない場合、app.configがデフォルト値を提供します。

5分前の最後の質問でコメントしました複数のアプリケーションに共通のapp.config

ファイルは読み取り専用としてマークする必要があるため、外部アプリはファイルをロックしないでください。異なるアセンブリからapp.configsに書き込んでいる場合、構成ファイルがロックされる可能性があります。異なるアセンブリからApp.Configに書き込むことはお勧めしませんが、書き込む場合は、読み取り/書き込み操作でTry / Catchを実行し、そのIO例外がファイルがロックされているかどうかを確認します。

private static bool IsFileLocked(Exception exception)
{
    int errorCode = Marshal.GetHRForException(exception) & ((1 << 16) - 1);
    return errorCode == 32 || errorCode == 33;
}
于 2013-03-03T04:05:21.517 に答える
0

複数のアプリでapp.configを共有するという点で、少し型破りなことをしています。その名前が示すように、app.configはアプリごとに使用することを目的としています。System.Configurationアプリがapp.configに書き込めるようにする方法があります(したがって、しばらくの間書き込みロックします。同時に書き込もうとしている別のアプリはエラーを受け取ります)。私は個人的に共有構成をデータベースに入れる傾向があります。 。

しかし、これについて強い主張がある場合は、大丈夫です。アプリは起動時にapp.configを読み取り、設定をキャッシュします。構成を共有するアプリはapp.configに書き込まないように、開発者間で文書化された規則を作成することをお勧めします。

ASP.NETweb.configには、変更が監視されるという追加の動作があることに注意してください。しかし、これはIISに固有のものだと思います。そして、私はあなたがweb.configを扱っているとは思わない。

于 2013-03-03T05:05:32.463 に答える