是否加载外部app.config锁定它?

时间:2013-03-03 03:42:43

标签: c# locking app-config

当有多个应用程序的单个app.config文件时,是否会出现锁定问题?

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

2 个答案:

答案 0 :(得分:1)

App.configs是只读的,除非应用程序发布者发布新版本,否则不应更改。用户配置设置存储在user.config文件中,而不是app.config中。在此user.config文件的abscence中,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;
}

答案 1 :(得分:0)

在让多个应用共享app.config时,您正在做一些非常规的事情。顾名思义,app.config旨在用于每个应用程序。 System.Configuration中有一些方法允许应用程序写入app.config(因此将其写入锁定片刻。另一个尝试在同一时刻写入的应用程序将收到错误。)我个人倾向于数据库中的共享配置。

然而,如果你有充分理由,你应该没问题。应用程序在启动时读取app.config并缓存设置。我建议在开发人员之间建立一个文档约定,即应用程序共享配置不应该写入app.config。

请注意,ASP.NET web.config有一些额外的行为,因为它会受到更改的监视。但我认为这是IIS特有的;我不认为你正在处理web.config。