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 是只读的,除非应用程序发布者发布它的新版本,否则不应更改。用户配置设置存储在 user.config 文件中,而不是 app.config 中。在没有这个 user.config 文件的情况下,app.config 提供了默认值。

我 5 分钟前在你的上一个问题中评论了Common app.config for multiple applications

由于文件应标记为只读,因此外部应用程序不应锁定文件。如果您从不同的程序集写入 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 回答