user.config 파일을보고 설정이 변경 될 때 설정을 다시로드하려면 어떻게해야합니까?
-
22-08-2019 - |
문제
WPF 응용 프로그램의 여러 인스턴스를 실행하는 상황이 있습니다. 인스턴스가 동일한 user.config 파일을 공유하고 싶습니다. 현재, 인스턴스가 사용자에게 쓴 인스턴스는 마지막으로 승리합니다. 모든 인스턴스가 user.config 파일을보고 다른 인스턴스가 변경 될 때마다 설정을 다시로드하는 것을 선호합니다. user.config 파일은 현재 여기에 있습니다.
C : 문서 및 설정사용자 이름로컬 설정 응용 프로그램 데이터회사 이름\exename.exe_strongname_해시시\1.0.0.0
예를 들어, C : 문서 및 설정 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;
이제 나는 a를 사용할 수 있습니다 FileSystemWatcher 파일이 변경 될 때 알림을받습니다.
다른 팁
파일을 캐시하고 캐시 의존성을 구현하여 파일에 변경되면 파일이 캐시에서 다시로드됩니다. 내 응용 프로그램에 허가 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 컨트롤을 사용할 수 있습니까?
트리거 할 수있는 수정 된 이벤트가 있습니다