我在那里我遇到我的WPF应用程序的多个实例的情况。我想实例共享相同的user.config文件。目前,无论实例写入user.config文件的最后胜利。我宁愿所有实例看user.config文件并重新加载设置每当另一个实例更改它。目前user.config文件位于此处:

C:\ Documents和Settings \ 用户名 \本地设置\应用数据\ 公司名称 \ EXENAME .exe_StrongName_ 散列 \ 1.0.0.0

例如,C:\ Documents和Settings \ USENAME \本地设置\应用数据\公司\ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0

有我得到这个全路径(包括散列),所以我可以添加一个文件观察者的user.config文件的方式?

如果是这样,我想重新加载设置文件发生更改时。它是那么容易,因为调用此方法?

Properties.Settings.Default.Reload();
有帮助吗?

解决方案

我发现它。下面的代码将路径返回user.config文件。您需要添加到System.Configuration.dll参考

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
string path = config.FilePath;

现在我可以使用 FileSystemWatcher的得到通知时,文件的变化。

其他提示

您应该缓存中的文件,因此,如果有任何变化的文件被在缓存重新加载的文件进行实施的CacheDependency。我用我的应用程序,它被存储在缓存中,如果文件被更改重新加载许可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));
    }

缓存也将提高应用程序的性能。

可以使用FileSystemWatcher的控制?

它具有修饰的事件可以触发

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top