2013-03-03 87 views
2

当几个应用程序有一个app.config文件时,是否会有锁定问题?加载外部app.config是否锁定它?

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

回答

1

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

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

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

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