2013-04-26 4 views
1

Settings.settings를 사용하여 일부 변수를 정의/유지하려고합니다. 간단히 말해서, 내가보고 있어요 동작을 설명하기위한 테스트 파일을 설정 한 :속성보기 설정. 기본 변수

From the Settings.settings window (variableName

내가 다음 코드를 가지고 :

첫째, 내가 Settings.settings의 설정을 정의 여기서 variableName 변경 테스트 :

public Form1() 
    { 
     InitializeComponent(); 

     string newString = Properties.Settings.Default.variableName; 
     Properties.Settings.Default.variableName = "This is a new string"; 
     Properties.Settings.Default.Save(); 
    } 

는 처음 디버거 상기 실행, I는 전류 값 Properties.Settings로부터 여기서 variableName의 (I 처음 Settings.settings 창에서 설정 한 값)을 잡아. 예상대로 newString은 "This is a string"으로 설정됩니다. 좋습니다 .....

디버거에서 variableName이 "This is a new string"으로 변경된 것을 보여줍니다. 좋습니다 ....

다음 디버거를 통해 응용 프로그램을 다시 실행하십시오. 문자열 newString 줄을 치고 실행 전에 newString이 정의되지 않았습니다. 좋은 ....

Undefined...not executed yet

최대한 빨리 실행으로

...

string newString = Properties.Settings.Default.variableName; 

... 그리고 코드의 후속 실행에, 여기서 variableName의 실제 값은 "이 같이 정의된다 새로운 문자열입니다 "(Good ... 예상대로).

그런 다음 Settings.settings 창으로 돌아갑니다. variableName은 변경되지 않았습니다. 여전히 "This is a string"입니다. 나는 VSE 2012를 닫고 프로젝트를 다시 열었습니다. 설정. 설정이 변경되지 않습니다.

어디에 새로운 값이 저장됩니까? 모든 .config 파일 ([appname] .exe.config, [appname] .vshost.exe.config, app.config 및 Settings.settings 파일)과 새 값인 "This is a new- 문자열 "은 어디에도 없습니다.

요약하면 코드에서 원하는 결과가 나타나지만 디버거에서 var 값을 확인하는 것 이외의 다른 디자인 타임에 결과를 볼 수 없습니다. 이것은 나에게 특이한 것뿐만 아니라 불가능한 것처럼 보인다.

내가 무엇을 놓치고 있는지/어디에서 보지 않습니까? 나는 완전히 variableName의 값이 Settings.settings 창에서 변경 될 것으로 기대하지만 절대로 그렇지 않습니다. StackOverflow/Google 어디에서나 보았고 대답을 찾지 못하는 것 같습니다. 사전에

덕분에 ....

답변

2

Settings.settings를 통해 구성한 원래 값은 실행 파일의 어셈블리와 함께 .config 파일에 저장됩니다. Visual Studio를 통해 설정 파일을 직접 수정하지 않으면 변경되지 않습니다. 그것은 본질적으로 읽기 전용 파일입니다.

사용자의 사용자 지정된 설정은 사용자 프로필 내의 별도 구성 파일에 저장됩니다. 이 파일의 위치는 어셈블리의 메타 데이터에 따라 다릅니다.예를 들어 Windows 7/Vista의 경우 위치는 다음과 같을 수 있습니다.

C:\Users\<user name>\AppData\Local\<company name>\<assembly name>\ 
    AssemblyName\<version>\user.config 

어셈블리의 메타 데이터에 회사 이름을 사용자 정의하지 않은 경우 기본적으로 Microsoft가 될 수 있습니다. 또한 AppData는보기 설정에 따라 Windows 탐색기에 표시되지 않을 수있는 숨겨진 폴더입니다.

+0

시간을내어 주셔서 감사합니다. Settings.settings 'var store'는 영속성을 필요로하는 사용자 범위에 하나의 var 만 가진 내 응용 프로그램에 대한 ConfigurationManager를 사용하는 것을 피하는 탁월한 방법 (IMO)입니다. 이제 위의 예에서 변경되는 파일을 찾을 수있게되었습니다 (경로를 포함 하겠지만 내 의견에 280 자 밖에 남지 않았습니다 ... 하하). Settings.settings 테이블을 사용하면 더욱 자신감을 가질 수 있습니다. 나는 그것이 부당한 편집증 인 것을 안다. 그러나 나는 적당한 사람이기 때문에 OCD 태그를 얻지 않았다. 친애하는... – LovinItAll

0

제가 질문을 이해한다면 확실하지 않다. 그 가변적 인 내용은 계속 유지됩니다. 그게 전부 야. 나중에 영구 변수를 변경하도록 설정하는 이유는 무엇입니까?

+0

왜 누군가가 settings.settings에서 변수를 만들고 설정하고 런타임에 해당 변수를 주기적으로 변경하려고하는지 묻습니다. 이러한 상황이 발생하는 많은 상황이 있으며, 특히 사용자 범위에서 그렇습니다. 예를 들어, ConfigurationManager 클래스를 사용하는 대신, 특히 사용자가 변경하는 구성 매개 변수가 거의없는 경우 제공된 예제는 매우 편리합니다 (예 : 데이터 저장을위한 사용자 범위 파일 경로 설정). 명확하지 않은 경우 좀 더 자세히 설명 할 수 있습니다. – LovinItAll