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

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



답변

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

사용자 범위

사용자 범위 설정은

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되며 런타임시 읽기 전용입니다.


답변

다음은 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은 애플리케이션 어셈블리 강력한 이름 여부에 따라 다릅니다.


답변

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

프로젝트에 설정을 추가하면 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. 프로그램에 강력한 이름을 지정한 경우 강력한 이름이이 경로의 프로그램 이름에 추가됩니다.


답변

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

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‘입니다.


답변

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

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

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


답변

음, Settings.Default.Reset ()을 사용하여 기본 설정을 복원 할 수 없습니까?


답변

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

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

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