2010-07-14 1 views
4

현재 XLinq을 사용하여 디렉터리를 탐색하고 값을 읽고 쓸 수있는 * .exe 실행 파일을 통해 다소 큰 * .exe.config 파일의 몇 가지 설정을 업데이트하고 있습니다. 이 방법으로 업데이트하는 문제는 실행 파일을 다시 시작한 후에 변경 내용이 적용된다는 것이지만 변경 내용이 즉시 적용되기를 바랍니다. 변경 한 후에 * .exe.config 파일을 다시로드하도록 실행 파일에 지시하는 방법이 있습니까?설정 파일 업데이트 및 응용 프로그램의 값 업데이트

모든 도움을 주시면 감사하겠습니다. 의 app.config에 대한

외골격

<configuration> 
    <system.serviceModel> 
    <!-- stuff... --> 
    <client> 
     <!-- this is the section I changed and want to have updated --> 
    </client> 
    </system.serviceModel> 
</configuration> 

편집 : 나는이 주제에 대해 거의 알고있는 이유 중 하나는 내가의 app.config를 작성하지 않은 것입니다 - 그것은 자동으로 생성 된 사람에 의해입니다 다른 사람의 코드. 변경해야하고 변경 사항을 응용 프로그램에서 적용해야하는 이유는 구성 파일에서 데이터를 가져 오기 위해 코드의 다른 부분 (내가 액세스 할 권한이 없음)이 호출되지만, 섹션에서는 이전 설정이 사용되며이 응용 프로그램에서는 작동하지 않습니다.

EDIT2 :이 코드를 동적으로 변경할 수없는 경우 어떻게 코드를 변경하여 동적으로 수행 할 수 있습니까? 우수 답변은 현상금을 얻습니다 ...

+0

가능 중복 (http://stackoverflow.com/questions/272097/net-dynamically-refresh-app-config) 이들 솔루션의 –

+0

중에 작동하지 [동적 .net의 리프레시의 app.config] 나를. 프로세스를 돕기 위해 내 app.config 파일의 일부 의사 (pseudo)를 게시 할 것입니다. –

+0

오 이런 얘야.앱이 사용할 수있는 모든 구성 가능한 비트 중에서 통화가 진행되는 동안 WCF 끝점을 변경하려고합니다. WCF 끝점을 동적으로 구성하려면 앱에 * 심각한 * 다시 쓰기가 필요합니다. –

답변

1
var client = 
System.ServiceModel.ChannelFactory<ISampleService>(
    System.ServiceModel.Channels.Binding binding, 
    System.ServiceModel.EndpointAddress remoteAddress) 

프로그래밍 방식으로 서비스에 연결할 수도 있으며 WCF에 직접 필요한 구성을 지정할 수 있습니다.

이것을 사용하면 더 이상 exe에서 wcf config가 필요하지 않습니다.

https://msdn.microsoft.com/en-us/library/ms576132.aspx

+0

링크를 de-de 대신 en-us로 바꿨을 때 링크가 잘 작동했습니다. 클라이언트를 만들고 제안을 구현하려고하는 코드를 볼 수 있는지 확인합니다. –

1

범위가 "User"인 설정은 응용 프로그램이 실행되는 동안 쉽게 저장하고 검색 할 수 있습니다. 귀하의 설정이 범위 "응용 프로그램"인 경우 응용 프로그램을 다시 시작하지 않고 수정하고 다시로드 할 수 없습니다. 그러면 자신의 구성 솔루션을 롤백해야합니다.

+0

내 설정의 범위를 어떻게 알 수 있습니까? –

+2

application.exe.config 파일에있는 경우 응용 프로그램 범위입니다. 구성 파일이 사용자 프로필/AppData/Local 폴더에 있으면 사용자 범위입니다. 코드 스 니펫에서 볼 수 있듯이 동적으로 다시로드 할 수는 없습니다. .NET 구성은 현재로서는이 작업을 수행 할 수 없습니다. configSource 속성을 사용하여 운이 좋을 수도 있습니다. –

+0

@ 에릭 : 맞아. 이 문제는 MSDN에서 잘 알려져 있으며 문서화되어 있습니다. –

1

이 작업을하는 데 2 ​​부분이 있습니다. 1) 올바른 설정 파일을 업데이트하고, 2) 강제로 변경 사항을 다시로드하십시오.

1) .net 프로세스가 시작되면 기존 .config 파일을 vshost.exe.config 파일로 복사합니다. 프로세스가 시작된 후 원본 구성 파일을 업데이트하면 프로세스를 다시 시작할 때까지 vshost.config에 해당 구성 파일이 표시되지 않습니다. 따라서 런타임에이 작업을 수행하려면 exe.config 파일이 아닌 vshost.exe.config 파일을 업데이트해야합니다.

2) 강제로 .net에서 설정을 다시로드하려면 구성 관리자에게 설정이 변경되었음을 알려줘야합니다. 이 작업은 ConfigurationManager.RefreshSection()을 사용하여 수행 할 수 있습니다. 좀 더 많은 정보와 몇 가지 코드 예제에서이

: 기본적으로 http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/3c365fdb-563e-4b0a-a4b4-df684c2dd908/

+0

1)에서 말한 내용이 틀렸을 것입니다. * .vshost.exe 실행 파일은 Visual Studio 디버거에서 프로그램을 실행할 때만 사용됩니다. 응용 프로그램을 디버깅하기 전에 VisualStudio는 app.config를 myapp.exe.config 및 myapp.vshost.exe.config로 복사합니다. –

+0

이 방법은 파일을 처음 변경하면 작동하지만 이후 변경 사항은 적용되지 않습니다. 왜 이런 일이 일어나는 지 아십니까? –

+0

이것은 제대로 작동하지 않았으므로 아직 "정확한"대답이 아니지만 가장 가까운 곳에서 현상금을 수여했습니다. –

1

는, 마이크로 소프트가 이런 식으로 설계 특히이 시도에서 당신을 억제하기 위해, (에서 읽은 구성을 갖는 다시하지 시작) 때문에 * .config 파일은 C : \ Program Files 폴더에 있으며 비 관리자가 쓸 수 없도록되어 있습니다.

관련 문제