我遇到的情况是我正在运行WPF应用程序的多个实例。我希望实例共享相同的user.config文件。目前,无论哪个实例写入user.config文件最后获胜。我希望所有实例都能看到user.config文件,并在其他实例更改时重新加载设置。 user.config文件当前位于此处:
C:\ Documents and Settings \ 用户名 \ Local Settings \ Application Data \ 公司名称 \ ExeName .exe_StrongName_ hash < / EM> \ 1.0.0.0
例如,C:\ Documents and Settings \ usename \ Local Settings \ Application Data \ Company \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0
我有没有办法获得这个完整路径(包括哈希)所以我可以将文件观察器添加到user.config文件中?
如果是这样,我想在文件更改时重新加载设置。是否像调用此方法一样简单?
Properties.Settings.Default.Reload();
答案 0 :(得分:6)
我找到了。以下代码将返回user.config文件的路径。您需要添加对System.Configuration.dll的引用
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
string path = config.FilePath;
现在我可以使用FileSystemWatcher在文件更改时收到通知。
答案 1 :(得分:1)
您应该缓存文件并实现CacheDependency,以便在对文件进行任何更改时,文件将在Cache中重新加载。我在我的应用程序中使用权限xml文件,该文件存储在缓存中并在文件更改时重新加载。这是代码:
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument permissionsDoc = null;
if (Cache["Permissions"] == null)
{
string path = Server.MapPath("~/XML/Permissions.xml");
permissionsDoc = new XmlDocument();
permissionsDoc.Load(Server.MapPath("~/XML/Permissions.xml"));
Cache.Add("Permissions", permissionsDoc,
new CacheDependency(Server.MapPath("~/XML/Permissions.xml")),
Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack));
}
else
{
permissionsDoc = (XmlDocument)Cache["Permissions"];
}
}
private void ReloadPermissionsCallBack(string key, object value, CacheItemRemovedReason reason)
{
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/XML/Permissions.xml"));
Cache.Insert("Permissions", doc ,
new CacheDependency(Server.MapPath("~/XML/Permissions.xml")),
Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack));
}
缓存也会提高您的应用程序性能。
答案 2 :(得分:0)
你能使用fileSystemWatcher控件吗?
它有一个可以触发的修改事件