如何查看user.config文件并在更改时重新加载设置?

时间:2009-05-19 18:11:34

标签: c# wpf settings user-config

我遇到的情况是我正在运行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();

3 个答案:

答案 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控件吗?

它有一个可以触发的修改事件