[英]How do you upgrade all settings in user.config when the version number changes?
[英]How can I watch the user.config file and reload the settings when it changes?
我遇到了正在運行WPF應用程序的多個實例的情況。 我希望實例共享相同的user.config文件。 當前,無論哪個實例寫入到user.config文件,最后一次獲勝。 我希望所有實例都可以觀看user.config文件,並在其他實例對其進行更改時重新加載設置。 user.config文件當前位於此處:
C:\\ Documents and Settings \\ 用戶名 \\ Local Settings \\ Application Data \\ 公司名稱 \\ ExeName .exe_StrongName_ hash \\ 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();
我找到了。 以下代碼將路徑返回到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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.