program story

.NET 데스크톱 앱의 Settings.settings 대 app.config

inputbox 2020. 9. 17. 07:51
반응형

.NET 데스크톱 앱의 Settings.settings 대 app.config [중복]


중복 가능성 :
app.config 파일과 XYZ.settings 파일의 차이점은 무엇입니까?

데스크톱 응용 프로그램 설정을 저장하고 관리하기 위해 Visual Studio에서이 두 가지 메커니즘이 중복되어 있다는 점에 상당히 혼란 스럽습니다.

  • XML app.config파일을 사용 하여 <appSettings>섹션에 항목을 추가 할 수 있습니다 . 이들은 ConfigurationManager클래스를 사용하여 코드에서 검색 할 수 있습니다 .
  • 또는 Settings.settings 파일을 사용하여 편집기를 통해 개별 설정을 추가 할 수 있습니다. Visual Studio는 Settings런타임에 형식이 안전한 설정 검색을위한 클래스를 생성합니다 .

이 두 메커니즘은 동일한 (또는 거의 동일한) 목적을 수행하는 것 같습니다. 나는 약간의 차이가 있다는 것을 알고 있지만 중복과 그 결과에 대해서도 의아해합니다. 예를 들어 Visual Studio를 사용하여 Settings.settings파일 에 설정을 추가하면 입력 한 모든 정보가 app.config파일의 항목으로 끝납니다 . 분명히 동기화 메커니즘이 존재합니다. app.config파일 의 설정을 변경하면 Visual Studio는 Settings.settings다음에 편집기에서 파일을 열 때 파일 을 업데이트하라는 메시지를 표시합니다 .

내 질문은 다음과 같습니다.

  • 왜 하나가 아닌 두 가지 메커니즘입니까?
  • app.configover 를 사용하는 가장 일반적인 시나리오는 무엇입니까 Settings.settings?
  • 내 앱이 사용 중이고 배포 된 후 Settings.settings값을 변경 하면 어떻게됩니까 app.config? Settings.settings이미 컴파일 및 배포되었으므로 동기화가 발생할 수 없습니다 .

노트. 이 주제에 대한 질문을 검색했지만 훨씬 더 혼란 스럽습니다. 예를 들어, 여기에 있는 이 질문에 대한 답변 은 매우 모순적이며 많은 빛을 비추 지 않습니다.

참고 2. 이것이 app.config디자인 타임 파일 이름이라는 것을 알고 있으며 Visual Studio를 실행 폴더로 복사하고 이름을 바꾸는 역학에 익숙합니다.


.NET Framework 관점에서 (현재 Visual Studio는 도구가 아님), 역사적으로 단지 [app.exe].config(사실 AppDomain이 구성 파일로 정의하는 것입니다. 이름은 AppDomain에 의해 정의됩니다. web.config웹 앱 용인 이유 ...) 및 machine.config. 'app'은 애플리케이션과 함께 배포되고 'machine'은 전체 머신을위한 것입니다. 일반 사용자에게는 '아주'읽기 전용이어야했습니다. 변경할 수는 있지만 아이디어가 아닙니다.

그러면 최종 사용자 기본 설정을 어떻게 저장할 수 있습니까? 이것이 [user] .config가 도입 된 이유입니다 (나는 .NET 2를 믿습니다). 공식 문서는 다음과 같이 말합니다.

원래 .NET Framework와 함께 릴리스 된 구성 시스템은 로컬 컴퓨터의 machine.config 파일을 통해 또는 응용 프로그램과 함께 배포하는 app.exe.config 파일 내에서 정적 응용 프로그램 구성 데이터를 제공하는 것을 지원합니다. LocalFileSettingsProvider 클래스는 다음과 같은 방식으로이 기본 지원을 확장합니다.

1) 응용 프로그램 범위 설정은 machine.config 또는 app.exe.config 파일에 저장할 수 있습니다. Machine.config는 항상 읽기 전용이지만 app.exe.config는 보안 고려 사항에 따라 대부분의 응용 프로그램에서 읽기 전용으로 제한됩니다.

2) 사용자 범위 설정은 app.exe.config 파일에 저장할 수 있으며이 경우 정적 기본값으로 처리됩니다.

3) 기본이 아닌 사용자 범위 설정은 새 파일 인 user.config에 저장됩니다. 여기서 user는 현재 응용 프로그램을 실행중인 사람의 사용자 이름입니다. DefaultSettingValueAttribute를 사용하여 사용자 범위 설정의 기본값을 지정할 수 있습니다. 사용자 범위 설정은 응용 프로그램 실행 중에 자주 변경되기 때문에 user.config는 항상 읽기 / 쓰기입니다.

따라서 .NET Framework 관점에서 보면 3 계층 메커니즘이 하나만 있습니다.

이제 Visual Studio는 최종 읽기 / 쓰기 설정에 대한 형식 안전 코드를 생성하여 사용자를 지원하려고합니다. 대부분의 경우 해당 [user] .config 파일은 존재하지 않으며 설정 값은 DefaultSettingValueAttribute(각 설정에 대해 정의 됨)에있는 내용에 의해 정의되거나 app.config에 정적으로 정의 된 내용을 사용합니다. 그렇기 때문에 Visual Studio는 설정에 대한 정적 기본값을 정의 할 수 있도록 app.config 파일도 업데이트합니다. 그러나 모든 app.config 항목을 완벽하게 삭제할 수 있습니다.


왜 하나가 아닌 두 가지 메커니즘입니까?

그들은 다른 목적으로 사용됩니다. 설정 API는 애플리케이션에서 읽기 / 쓰기 액세스를 제공하는 반면, config는 읽기 전용입니다 (파일을 코드로 작성하지 않는 한).

설정은 사용자 또는 애플리케이션별로 정의 할 수 있으며 휘발성이 있도록 설계되었습니다. 사용자 설정은 UAC에서 허용되는 사용자 프로필 저장소 내의 숨겨진 폴더에 기록됩니다.

App.config는 애플리케이션별로 만 제공됩니다. App.config에 대한 변경 사항은 자동으로 선택되지 않습니다. 값을 새로 고치려면 다시 시작하거나 코드를 작성해야합니다. UAC에서 사용자는 프로그램 파일과 같은 응용 프로그램 디렉터리에 쓸 수 없으므로이 파일은 정적 읽기 전용으로 간주되어야합니다.

Settings.settings를 통해 app.config를 사용하는 가장 일반적인 시나리오는 무엇입니까?

데스크탑 애플리케이션의 설정을 사용하여 사용자 환경 설정 또는 런타임시 변경되는 설정을 저장할 수 있습니다.

연결 문자열 등과 같은보다 일반적인 정적 설정이나 앱 내에서 사용되는 구성 요소의 구성을 정의하려면 App.config를 사용합니다.

내 앱이 Settings.settings를 사용하고 배포 된 후 app.config에서 값을 변경하면 어떻게됩니까?

응용 프로그램이 재배포되면 컴퓨터에 사용자 / 앱 사용자 지정이 이미있는 경우를 제외하고는 새 설정을 선택합니다.이 경우 초기화하지 않는 한 계속 사용합니다.

새 설정을 추가하면 선택됩니다. 실제로 기본값은 Settings 클래스에 구워 져 있으므로 app.config가 비어 있어도 Settings는 여전히 작동합니다.

참고 URL : https://stackoverflow.com/questions/7456291/settings-settings-vs-app-config-in-net-desktop-app

반응형