W przypadku korzystania z pliku Settings.settings w .NET, gdzie faktycznie jest przechowywana konfiguracja?

100

W przypadku korzystania z pliku Settings.settings w .NET, gdzie faktycznie jest przechowywana konfiguracja? Chcę usunąć zapisane ustawienia, aby powrócić do stanu domyślnego, ale nie mogę znaleźć miejsca ich przechowywania ... jakieś pomysły?

Adam Haile
źródło

Odpowiedzi:

100

Zależy to od tego, czy wybrane ustawienie jest w zakresie „Użytkownik” czy „Aplikacja”.

Zakres użytkownika

Ustawienia zakresu użytkownika są przechowywane w pliku

C: \ Documents and Settings \ nazwa użytkownika \ Ustawienia lokalne \ Dane aplikacji \ Nazwa aplikacji

Możesz je czytać / zapisywać w czasie wykonywania.

W systemie Vista i Windows 7 folder to

C: \ Users \ nazwa użytkownika \ AppData \ Local \ ApplicationName

lub

C: \ Users \ nazwa użytkownika \ AppData \ Roaming \ ApplicationName

Zakres zastosowania

Ustawienia zakresu aplikacji są zapisywane w programie AppName.exe.configi są dostępne tylko do odczytu w czasie wykonywania.

Rozwiązanie Yogi
źródło
20
Folder ustawień zakresu użytkownika w systemie Vista i Win7 to C: \ Users \ nazwa_użytkownika \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version lub C: \ Users \ nazwa_użytkownika \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version w zależności od wartość właściwości Roaming w okienku Ustawienia.
jakdep
4
chyba że jest to dodatek, w takim przypadku będzie to AppName.dll.config
Anonymous Type
4
Mój lokalny user.config w systemie Windows 7 znajduje się w C: \ Users \ <nazwa_użytkownika> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder
53

Oto fragment kodu, którego możesz użyć do programowego uzyskania lokalizacji pliku user.config:

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

ApplicationSettings (czyli settings.settings) domyślnie używa PerUserRoamingAndLocal do ustawień użytkownika (jak zapamiętałem).

Aktualizacja: Dziwne, ale jest tu zbyt wiele błędnych odpowiedzi. Jeśli szukasz pliku ustawień w zakresie użytkownika (user.config), będzie on znajdować się w następującym folderze (w systemie Windows XP):

C: \ Documents and Settings \ (nazwa użytkownika) \ Local Settings \ Application Data \ (nazwa-firmy-jeśli-istnieje) \ (nazwa-aplikacji) .exe_ (Url | StrongName) _ (hash) \ (wersja-aplikacji) \

Url lub StrongName zależy od tego, czy masz silną nazwę zestawu aplikacji, czy nie.

arbiter
źródło
Masz jakiś pomysł, co składa się na hasz na tej ścieżce? Każda kolejna wersja mojej aplikacji otrzymuje inną wartość skrótu, co sprawia, że ​​wywoływanie ApplicationSettingsBase.Upgrade () jest bezcelowe. : /
Mal Ross
2
Hash to skrót SHA1 StrongName, gdy aplikacja jest podpisana lub ścieżka, gdy aplikacja jest niepodpisana. Więcej tutaj msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
arbiter
20

Zakładając, że mówisz o komputerach stacjonarnych, a nie aplikacjach internetowych:

Po dodaniu ustawień do projektu VS tworzy plik o nazwie app.configw katalogu projektu i zapisuje ustawienia w tym pliku. Tworzy równieżSettings.cs plik udostępniający statyczne dostępu do poszczególnych ustawień.

W czasie kompilacji VS (domyślnie; możesz to zmienić) skopiuje app.configplik do katalogu kompilacji, zmieniając jego nazwę tak, aby pasowała do pliku wykonywalnego (np. Jeśli plik wykonywalny jest nazwany foo.exe, plik zostanie nazwanyfoo.exe.config ). Menedżer konfiguracji .NET wyszukuje, kiedy pobiera ustawienia w czasie wykonywania.

Jeśli zmienisz ustawienie za pomocą edytora ustawień VS, zaktualizuje zarówno app.configi Settings.cs. (Jeśli spojrzysz na metody dostępu właściwości w wygenerowanym kodzie w programie Settings.cs, zobaczysz, że są one oznaczone atrybutem zawierającym domyślną wartość ustawienia znajdującego się w app.configpliku). Jeśli zmienisz ustawienie, edytując app.configplik bezpośrednio, Settings.csnie zostanie zaktualizowany, ale nowa wartość będzie nadal używana przez program po uruchomieniu, ponieważ app.configzostanie skopiowana do foo.exe.configw czasie kompilacji. Jeśli wyłączysz tę opcję (ustawiając właściwości pliku), możesz zmienić ustawienie, bezpośrednio edytując plikfoo.exe.config plik w katalogu kompilacji.

Następnie są ustawienia w zakresie użytkownika.

Ustawienia zakresu aplikacji są tylko do odczytu. Twój program może modyfikować i zapisywać ustawienia zakresu użytkownika, dzięki czemu każdy użytkownik może mieć własne ustawienia. Te ustawienia nie są przechowywane w foo.exe.configpliku (ponieważ przynajmniej w systemie Vista programy nie mogą zapisywać w żadnym podkataloguProgram Files bez ); są przechowywane w pliku konfiguracyjnym w katalogu danych aplikacji użytkownika.

Ścieżka do tego pliku to %appdata%\%publisher_name%\%program_name%\%version%\user.confignp C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Zwróć uwagę, że jeśli nadałeś programowi silną nazwę, silna nazwa zostanie dołączona do nazwy programu w tej ścieżce.

Robert Rossney
źródło
1
Wygląda na to, że składnik My_Company ścieżki będzie domyślnie wskazywał Microsoft. Nie znalazłem jeszcze sposobu, aby to zmienić, który faktycznie działa, jeśli ktoś wie, dobrze byłoby to dodać.
1
user565869, czy próbowałeś już w Visual Studio, otworzyć kartę aplikacji właściwości projektu, kliknąć przycisk informacji o zespole, a wtedy powinieneś mieć możliwość zmiany firmy? powtórz to dla każdego projektu w swoim rozwiązaniu
gg89
15

Podczas przeglądania w celu ustalenia skrótu w nazwie folderu natknąłem się (za pomocą tej odpowiedzi ):

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

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

Dokładna ścieżka user.configplików wygląda mniej więcej tak:

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

gdzie

<Profile Directory>- jest katalogiem profilu mobilnego lub katalogiem lokalnym. Ustawienia są domyślnie przechowywane w user.configpliku lokalnym . Aby zapisać ustawienia w roamingu user.configpliku, należy zaznaczyć ustawienie z SettingsManageabilityAttributepomocą SettingsManageabilityzestawu do Roaming.

<Company Name>- jest zwykle ciągiem określonym przez AssemblyCompanyAttribute(z zastrzeżeniem, że ciąg jest zmieniany i skracany w razie potrzeby, a jeśli nie jest określony w zestawie, mamy procedurę rezerwową).

<App Name>- to zazwyczaj ciąg określony przez AssemblyProductAttribute(te same zastrzeżenia co w przypadku nazwy firmy).

<Evidence Type>oraz <Evidence Hash>- informacje pochodzące z dowodów domeny aplikacji w celu zapewnienia właściwej izolacji domeny aplikacji i zestawu.

<Version> - zazwyczaj wersja określona w AssemblyVersionAttribute . Jest to wymagane, aby odizolować różne wersje aplikacji wdrożone obok siebie.

Nazwa pliku to zawsze po prostu „ user.config”.

osoba ubiegająca się o
źródło
Niestety link do bloga jest uszkodzony. Jestem pewien, że byłoby to interesujące.
UweBaemayr
3

Znajduje się w folderze z nazwą aplikacji w folderze Application Data w folderze domowym użytkownika (C: \ documents and settings \ user na xp i c: \ users \ user w systemie Windows Vista).

Jest tu również kilka informacji .

PS: - spróbuj uzyskać do niego dostęp przez% appdata% w polu uruchamiania!

TheVillageIdiot
źródło
2

Czy nie możesz po prostu użyć Settings.Default.Reset (), aby przywrócić ustawienia domyślne?

Kildareflare
źródło
1

Wszystkie ustawienia są przechowywane w odpowiednim pliku konfiguracyjnym.

Plik .settings po prostu zapewnia silnie wpisaną klasę dla zestawu ustawień, które należą do siebie, ale rzeczywiste ustawienia są przechowywane w pliku app.config lub .config w aplikacji.

Jeśli dodasz plik .settings, plik app.config zostanie automatycznie dodany do ustawień, jeśli jeszcze go nie masz.

Praveen Angyan
źródło
1

Jeśli plik ustawień znajduje się w aplikacji internetowej, będą one znajdować się w pliku web.config (tuż pod projektem. Jeśli znajdują się w innym typie projektu, będą w pliku app.config (również pod Twoim projektem) .

Edytować

Jak wskazano w komentarzach: ustawienia aplikacji czasu projektowania znajdują się w pliku app.config dla aplikacji innych niż aplikacje internetowe. Podczas budowania plik app.config jest kopiowany do katalogu wyjściowego i otrzyma nazwę yourexename .exe.config. W czasie wykonywania odczytywany będzie tylko plik o nazwie yourexename.exe.config.

JMarsch
źródło
1
Niepoprawne. W uruchomionej aplikacji nie ma pliku ustawień app.config, ponieważ nazwa app.config zostanie zmieniona na [nazwa aplikacji] .exe.config. W każdym razie ten plik będzie zawierał tylko ustawienia ApplicationScoped z settings.settins.
arbiter
@arbiter: Być może nie zrozumiałem pytania, ale wydawało się, że Adam pyta o domyślne wartości czasu projektowania. Są one przechowywane w pliku app.config. W czasie kompilacji plik app.config jest kopiowany do katalogu kompilacji i zmieniany na (theapp.exe.config). Jeśli jednak edytujesz ten plik bezpośrednio (i pracujesz w Visual Studio), ryzykujesz, że zawartość zostanie nadpisana podczas następnej kompilacji. Podsumowując: w przypadku wdrożonej aplikacji (lub jeśli pracujesz poza IDE), zmień plik name.exe.config). Jeśli pracujesz w VS, zmień wartość domyślną w ustawieniach lub app.config
JMarsch
0

Dwa pliki: 1) plik app.config lub web.config. Jej ustawienia można dostosować po kompilacji za pomocą edytora tekstu. 2) Plik settings.designer.cs. Ten plik zawiera wygenerowany automatycznie kod do załadowania ustawienia z pliku konfiguracyjnego, ale wartość domyślna jest również obecna w przypadku, gdy plik konfiguracyjny nie ma określonego ustawienia.

Frank Schwieterman
źródło
0

Wiem, że odpowiedź została już odebrana, ale czy nie możesz po prostu zsynchronizować ustawień w projektancie ustawień, aby wrócić do ustawień domyślnych?

jrsconfitto
źródło