.NET에서 Settings.settings 파일을 사용할 때 구성은 실제로 어디에 저장됩니까?


100

.NET에서 Settings.settings 파일을 사용할 때 구성은 실제로 어디에 저장됩니까? 기본 상태로 돌아 가기 위해 저장된 설정을 삭제하고 싶지만 저장 위치를 ​​찾을 수 없습니다. 아이디어가 있습니까?

답변:


100

선택한 설정이 "사용자"범위인지 "응용 프로그램"범위인지에 따라 다릅니다.

사용자 범위

사용자 범위 설정은

C : \ Documents and Settings \ 사용자 이름 \ Local Settings \ Application Data \ ApplicationName

런타임에 읽고 쓸 수 있습니다.

Vista 및 Windows 7의 경우 폴더는

C : \ Users \ 사용자 이름 \ AppData \ Local \ ApplicationName

또는

C : \ Users \ 사용자 이름 \ AppData \ Roaming \ ApplicationName

적용 범위

애플리케이션 범위 설정은에 저장 AppName.exe.config되며 런타임시 읽기 전용입니다.


20
Vista 및 Win7의 사용자 범위 설정 폴더는 C : \ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version 또는 C : \ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version입니다. 설정 창의 로밍 속성 값.
jakdep

4
추가 기능이 아닌 경우 AppName.dll.config
Anonymous Type

4
윈도우 7에 내 지역 user.config은 C : \ 사용자 \ <사용자 이름> \ AppData \ 로컬 \ 제작사 \ ApplicationName_Eid_EvidenceHash \ 버전
외로운 코더

53

다음은 user.config 파일 위치를 프로그래밍 방식으로 가져 오는 데 사용할 수있는 스 니펫입니다.

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

ApplicationSettings (예 : settings.settings)는 기본적으로 사용자 설정에 PerUserRoamingAndLocal을 사용합니다 (내가 기억 한대로).

업데이트 : 이상하지만 여기에 오답이 너무 많습니다. 사용자 범위 설정 파일 (user.config)을 찾는 경우 다음 폴더 (Windows XP의 경우)에 있습니다.

C : \ Documents and Settings \ (사용자 이름) \ Local Settings \ Application Data \ (company-name-if-exists) \ (앱 이름) .exe_ (Url | StrongName) _ (해시) \ (앱 버전) \

Url 또는 StrongName은 애플리케이션 어셈블리 강력한 이름 여부에 따라 다릅니다.


그 경로의 해시에 기여하는 것이 무엇인지 아십니까? 내 앱의 각 후속 릴리스는 다른 해시 값을 가져 오므로 ApplicationSettingsBase.Upgrade () 호출이 무의미합니다. : /
Mal Ross

2
Hash는 앱이 서명 된 경우 StrongName의 SHA1 해시이고 앱이 서명되지 않은 경우 경로입니다. 자세한 내용은 여기 msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
중재자

20

웹 애플리케이션이 아닌 데스크톱에 대해 이야기한다고 가정합니다.

프로젝트에 설정을 추가하면 VS는 app.config프로젝트 디렉터리에 이름이 지정된 파일을 만들고 해당 파일 에 설정을 저장합니다. 또한 Settings.cs개별 설정에 대한 정적 접근자를 제공 하는 파일을 빌드합니다 .

컴파일 타임에 VS는 (기본적으로 이것을 변경할 수 있습니다) app.config를 빌드 디렉터리에 복사 하여 실행 파일과 일치하도록 이름을 변경합니다 (예 : 실행 파일 이름 foo.exe이이면 파일 foo.exe.config이름이. NET 구성 관리자는 런타임에 설정을 검색하는시기를 찾습니다.

VS 설정 편집기를 통해 설정을 변경하면 app.configSettings.cs. (에서 생성 된 코드의 속성 접근 Settings.cs자를 보면 app.config파일 에있는 설정의 기본값을 포함하는 속성으로 표시되어 있음을 알 수 있습니다.) app.config파일을 직접 편집하여 설정을 변경하는 경우 , Settings.cs업데이트되지 않지만 새 값은 컴파일 타임에 app.config복사 되기 때문에 프로그램을 실행할 때 프로그램에서 계속 사용됩니다 foo.exe.config. 이 기능을 끄면 (파일 속성 설정) foo.exe.config빌드 디렉토리에서 파일 을 직접 편집하여 설정을 변경할 수 있습니다 .

그런 다음 사용자 범위 설정이 있습니다.

응용 프로그램 범위 설정은 읽기 전용입니다. 프로그램은 사용자 범위 설정을 수정하고 저장할 수 있으므로 각 사용자가 자신의 설정을 가질 수 있습니다. 이러한 설정은 foo.exe.config파일에 저장되지 않습니다 (최소한 Vista에서는 프로그램이 Program Files권한 상승없이의 하위 디렉터리에 쓸 수 없기 때문에 ). 사용자의 애플리케이션 데이터 디렉토리에있는 구성 파일에 저장됩니다.

해당 파일의 경로는 %appdata%\%publisher_name%\%program_name%\%version%\user.config, 예를 C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. 프로그램에 강력한 이름을 지정한 경우 강력한 이름이이 경로의 프로그램 이름에 추가됩니다.


1
경로의 My_Company 구성 요소가 Microsoft로 기본 설정되는 것 같습니다. 누군가 추가하는 것이 좋을 것이라는 것을 알고 있다면 실제로 작동하는 이것을 변경할 방법을 아직 찾지 못했습니다.

1
user565869, Visual Studio에서 시도한 적이 있습니까? 프로젝트 속성의 응용 프로그램 탭을 열고 어셈블리 정보 버튼을 클릭하면 회사를 변경할 수 있습니다. 솔루션의 각 프로젝트에
대해이

15

폴더 이름의 해시를 알아 내기 위해 둘러 보는 동안 ( 이 답변을 통해 ) 발견했습니다.

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(편집 : Wayback Machine 링크 : https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

user.config파일 의 정확한 경로 는 다음과 같습니다.

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

어디

<Profile Directory>-로밍 프로필 디렉터리 또는 로컬 디렉터리입니다. 설정은 기본적으로 로컬 user.config파일 에 저장됩니다 . 로밍에 설정을 저장하려면 user.config파일, 당신은 함께 설정 표시해야 SettingsManageabilityAttributeSettingsManageability로 설정을 Roaming.

<Company Name>-일반적으로에 의해 지정된 AssemblyCompanyAttribute문자열입니다 (문자열이 필요에 따라 이스케이프되고 잘립니다. 어셈블리에 지정되지 않은 경우 대체 절차가 있음에 유의).

<App Name>-일반적으로에서 지정한 문자열 AssemblyProductAttribute입니다 (회사 이름과 동일한 경고).

<Evidence Type><Evidence Hash>-적절한 앱 도메인 및 어셈블리 격리를 제공하기 위해 앱 도메인 증거에서 파생 된 정보.

<Version>-일반적으로 AssemblyVersionAttribute. 이는 나란히 배포 된 여러 버전의 앱을 격리하는 데 필요합니다.

파일 이름은 항상 단순히 ' user.config'입니다.


불행히도 블로그 링크가 끊어졌습니다. 흥미 로웠을 거라고 확신합니다.
UweBaemayr

3

사용자의 홈 폴더 (xp에서는 C : \ documents and settings \ user, Windows Vista에서는 c : \ users \ user)의 애플리케이션 데이터 폴더에 애플리케이션 이름이있는 폴더에 있습니다.

여기에도 몇 가지 정보가 있습니다 .

추신 :-실행 상자에서 % appdata %로 액세스하십시오!



1

모든 설정은 각 .config 파일에 저장됩니다.

.settings 파일은 함께 속하는 설정 집합에 대해 강력한 형식의 클래스를 제공하지만 실제 설정은 응용 프로그램의 app.config 또는 .config 파일에 저장됩니다.

.settings 파일을 추가하면 아직 설정이없는 경우 설정을 저장하기 위해 app.config가 자동으로 추가됩니다.


1

설정 파일이 웹 앱에있는 경우 web.config 파일 (프로젝트 바로 아래)에 있습니다. 다른 유형의 프로젝트에있는 경우 app.config 파일 (프로젝트 아래에도 있음)에 있습니다. .

편집하다

주석에서 지적했듯이 디자인 타임 애플리케이션 설정은 웹 애플리케이션 이외의 애플리케이션에 대한 app.config 파일에 있습니다. 빌드 할 때 app.config 파일이 출력 디렉터리에 복사되고 이름이 yourexename .exe.config 로 지정 됩니다. 런타임에는 yourexename.exe.config라는 파일 만 읽습니다.


1
정확하지 않습니다. app.config는 [appname] .exe.config로 이름이 변경되므로 실행중인 애플리케이션에는 app.config 설정 파일이 없습니다. 어쨌든이 파일에는 settings.settins의 ApplicationScoped 설정 만 포함됩니다.
중재자

@arbiter : 아마도 질문을 이해하지 못했지만 Adam은 디자인 타임 기본값에 대해 묻는 것처럼 보였습니다. 그것들은 app.config에 저장됩니다. 빌드시 app.config 파일이 빌드 디렉토리에 복사되고 이름이 (theapp.exe.config)로 바뀝니다. 그러나 해당 파일을 직접 편집하고 Visual Studio에서 작업하는 경우 다음에 빌드 할 때 내용을 덮어 쓸 위험이 있습니다. 결론 : 배포 된 앱의 경우 (또는 IDE 외부에서 실행중인 경우) name.exe.config 파일을 변경합니다. VS에서 작업하는 경우 설정에서 기본값을 변경하거나 app.config
JMarsch

0

두 개의 파일 : 1) app.config 또는 web.config 파일. 그녀의 설정은 텍스트 편집기로 빌드 한 후 사용자 지정할 수 있습니다. 2) settings.designer.cs 파일. 이 파일에는 구성 파일에서 설정을로드하는 자동 생성 코드가 있지만 구성 파일에 특정 설정이없는 경우에도 기본값이 있습니다.


0

이미 답변을 받았지만 설정 디자이너의 설정을 동기화하여 기본 설정으로 돌아갈 수는 없습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.