user.config 파일을보고 설정이 변경 될 때 설정을 다시로드하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/884260

  •  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 컨트롤을 사용할 수 있습니까?

트리거 할 수있는 수정 된 이벤트가 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top