.NET'te bir Settings.settings dosyasını kullanırken, yapılandırma gerçekte nerede depolanır?


100

.NET'te bir Settings.settings dosyasını kullanırken, yapılandırma gerçekte nerede depolanır? Varsayılan duruma geri dönmek için kaydedilen ayarları silmek istiyorum, ancak nerede depolandığını bulamıyorum ... herhangi bir fikir?

Yanıtlar:


100

Seçtiğiniz ayarın "Kullanıcı" kapsamında mı yoksa "Uygulama" kapsamında mı olduğuna bağlıdır.

Kullanıcı kapsamı

Kullanıcı kapsamı ayarları şurada saklanır:

C: \ Documents and Settings \ kullanıcı adı \ Local Settings \ Application Data \ ApplicationName

Bunları çalışma zamanında okuyabilir / yazabilirsiniz.

Vista ve Windows 7 için klasör

C: \ Kullanıcılar \ kullanıcı adı \ AppData \ Local \ UygulamaAdı

veya

C: \ Kullanıcılar \ kullanıcı adı \ AppData \ Dolaşım \ UygulamaAdı

Uygulama kapsamı

Uygulama kapsamı ayarları kaydedilir AppName.exe.configve çalışma zamanında salt okunurdur.


20
Vista ve Win7'deki kullanıcı kapsamı ayarları için klasör şudur: C: \ Users \ kullanıcıadı \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version veya C: \ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version, Ayarlar bölmesindeki Dolaşım özelliği değeri.
jakdep

4
bir eklentisi olmadığı sürece, bu durumda AppName.dll.config olacaktır
Anonim Tür

4
Windows 7'deki yerel user.config'im C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder

53

User.config dosya konumunu programlı olarak almak için kullanabileceğiniz kod parçacığı şu şekildedir:

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

ApplicationSettings (yani ayarlar.settings) varsayılan olarak kullanıcı ayarları için PerUserRoamingAndLocal kullanır (hatırladığım gibi).

Güncelleme: Garip ama burada çok fazla yanlış cevap var. Kullanıcı kapsamlı ayarlar dosyasını (user.config) arıyorsanız, aşağıdaki klasörde (Windows XP için) bulunacaktır:

C: \ Documents and Settings \ (kullanıcı adı) \ Local Settings \ Application Data \ (şirket-adı-varsa) \ (uygulama-adı) .exe_ (Url | GüçlüAdı) _ (karma) \ (uygulama sürümü) \

Url veya StrongName, uygulama derlemesi güçlü adınızın olup olmadığına bağlıdır.


Bu yoldaki hash'e neyin katkıda bulunduğuna dair bir fikriniz var mı? Uygulamamın sonraki her sürümü farklı bir hash değeri alıyor ve bu da ApplicationSettingsBase.Upgrade () 'i çağırmayı boşuna yapıyor. : /
Mal Ross

2
Hash, uygulama imzalandığında StrongName'in SHA1 karması veya uygulama imzalanmadığında yoldur. Daha fazlası burada msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
hakem

20

Web uygulamaları yerine masaüstü hakkında konuştuğunuzu varsayarsak:

Bir projeye ayarlar eklediğinizde, VS app.configproje dizininizde adlandırılmış bir dosya oluşturur ve ayarları bu dosyada depolar. Ayrıca Settings.cs, bağımsız ayarlara statik erişim sağlayan dosyayı da oluşturur .

Derleme zamanında, VS (varsayılan olarak; bunu değiştirebilirsiniz) app.config, adını yürütülebilir dosya ile eşleşecek şekilde değiştirerek (örneğin, yürütülebilir dosyanın adı verilmişse foo.exe, dosya adlandırılacaktır foo.exe.config), yani. NET yapılandırma yöneticisi, çalışma zamanında ayarları aldığında arar.

VS ayarları düzenleyicisi aracılığıyla bir ayarı değiştirirseniz, hem app.configve hem de Settings.cs. (Oluşturulan koddaki özellik erişimcilerine bakarsanız, dosyanızda Settings.csbulunan ayarın varsayılan değerini içeren bir öznitelikle işaretlendiklerini görürsünüz app.config.) app.configDosyayı doğrudan düzenleyerek bir ayarı değiştirirseniz , Settings.csgüncellenmez, ancak yeni değer onu çalıştırdığınızda programınız tarafından kullanılmaya devam eder, çünkü derleme zamanında app.configkopyalanır foo.exe.config. Bunu kapatırsanız (dosyanın özelliklerini ayarlayarak), dosyayı doğrudan foo.exe.configyapı dizininde düzenleyerek bir ayarı değiştirebilirsiniz .

Ardından, kullanıcı kapsamlı ayarlar vardır.

Uygulama kapsamı ayarları salt okunurdur. Programınız, kullanıcı kapsamı ayarlarını değiştirebilir ve kaydedebilir, böylece her kullanıcının kendi ayarlarına sahip olmasına izin verir. Bu ayarlar foo.exe.configdosyada saklanmaz (en azından Vista altında programlar Program Filesyükseltmesiz herhangi bir alt dizine yazamazlar); kullanıcının uygulama verileri dizinindeki bir yapılandırma dosyasında saklanırlar.

Bu dosyanın yolu %appdata%\%publisher_name%\%program_name%\%version%\user.config, örn C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Programınıza güçlü bir ad verdiyseniz, güçlü adın bu yoldaki program adına ekleneceğini unutmayın.


1
Yolun My_Company bileşeni Microsoft'a varsayılan olacak gibi görünüyor. Birisi eklemenin iyi olacağını biliyorsa, bunu değiştirmenin gerçekten işe yarayan bir yolunu henüz bulamadım.

1
user565869, visual studio'da denediniz mi, proje özelliğinin uygulama sekmesini açın, montaj bilgileri düğmesine tıklayın ve ardından Şirketi değiştirebilmelisiniz? çözümünüzdeki her proje için bunu tekrarlayın
gg89

15

Klasör adındaki hash hakkında bilgi edinmek için etrafta gezinirken karşılaştım ( bu cevapla ):

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

(düzenleme: Wayback Machine bağlantısı: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

user.configDosyaların tam yolu şuna benzer:

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

nerede

<Profile Directory>- ya gezici profil dizini ya da yerel olandır. Ayarlar varsayılan olarak yerel user.configdosyada saklanır . Dolaşım bir ayarı kaydetmek için user.configdosyaya, sizinle ayarı işaretlemek gerekir SettingsManageabilityAttributeile SettingsManageabilitykarşı sette Roaming.

<Company Name>- tipik olarak tarafından belirtilen dizedir AssemblyCompanyAttribute(dizenin gerektiği şekilde kaçtığı ve kesildiği uyarısıyla ve derlemede belirtilmezse, bir geri dönüş prosedürünüz vardır).

<App Name>- tipik olarak tarafından belirtilen dizedir AssemblyProductAttribute(şirket adıyla aynı uyarılar).

<Evidence Type>ve <Evidence Hash>- uygun uygulama alanı ve derleme izolasyonu sağlamak için uygulama alanı kanıtından elde edilen bilgiler.

<Version>- genellikle AssemblyVersionAttribute. Bu, yan yana dağıtılan uygulamanın farklı sürümlerini izole etmek için gereklidir.

Dosya adı her zaman basittir ' user.config'.


Maalesef blog bağlantısı koptu. Eminim ilginç olurdu.
UweBaemayr

3

Kullanıcının ana klasöründeki Uygulama Verileri klasöründe uygulamanızın adının bulunduğu bir klasördedir (xp'de C: \ belgeler ve ayarlar \ kullanıcı ve Windows Vista'da c: \ users \ user).

Burada da bazı bilgiler var .

Not: - çalıştırma kutusunda% appdata% ile erişmeyi deneyin!


2

Erm, varsayılan ayarlarınızı geri yüklemek için sadece Settings.Default.Reset () 'i kullanamaz mısınız?


1

Tüm ayarlarınız ilgili .config dosyasında saklanır.

.Settings dosyası, birbirine ait bir dizi ayar için kesin olarak yazılmış bir sınıf sağlar, ancak gerçek ayarlar uygulamanızdaki app.config veya .config dosyasında saklanır.

Bir .settings dosyası eklerseniz, bir app.config dosyası yoksa, ayarları barındırmak için otomatik olarak eklenir.


1

Ayarlar dosyanız bir web uygulamasındaysa, web.config dosyasında (projenizin hemen altında. Başka bir proje türündeyse, app.config dosyasında (ayrıca projenizin altında) olacaktır. .

Düzenle

Yorumlarda belirtildiği gibi: tasarım zamanı uygulama ayarlarınız, web uygulamaları dışındaki uygulamalar için bir app.config dosyasındadır. Oluşturduğunuzda , app.config dosyası çıktı dizinine kopyalanır ve adınız .exe.config olarak adlandırılır . Çalışma zamanında, yalnızca yourexename.exe.config adlı dosya okunacaktır.


1
Doğru değil. Çalışan uygulamada app.config ayarları dosyası yoktur, çünkü app.config [appname] .exe.config olarak yeniden adlandırılacaktır. Ve yine de bu dosya, settings.settins'deki yalnızca ApplicationScoped ayarlarını içerecektir.
hakem

@arbiter: Belki soruyu yanlış anladım, ama Adam tasarım zamanı varsayılanlarını soruyor gibi görünüyordu. Bunlar app.config dosyasında saklanır. Derleme zamanında, app.config dosyası yapı dizinine kopyalanır ve (theapp.exe.config) olarak yeniden adlandırılır. Ancak, bu dosyayı doğrudan düzenlerseniz (ve görsel stüdyoda çalışıyorsanız), bir sonraki derlemenizde içeriğin üzerine yazılma riskini alırsınız. Alt satır: Dağıtılmış bir uygulama için (veya IDE dışında çalışıyorsanız), teh name.exe.config dosyasını değiştirin).
VS'de çalışıyorsanız

0

İki dosya: 1) Bir app.config veya web.config dosyası. Ayarlar, bir metin düzenleyiciyle oluşturulduktan sonra özelleştirilebilir. 2) settings.designer.cs dosyası. Bu dosya, ayarı yapılandırma dosyasından yüklemek için otomatik olarak oluşturulmuş bir koda sahiptir, ancak yapılandırma dosyasının belirli bir ayara sahip olmaması durumunda da varsayılan bir değer mevcuttur.


0

Zaten yanıtlandığını biliyorum, ancak varsayılan ayarlarınıza geri dönmek için ayar tasarımcısındaki ayarları senkronize edemez misiniz?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.