Saat menggunakan file Settings.settings di .NET, di mana sebenarnya konfigurasi disimpan?

100

Saat menggunakan file Settings.settings di .NET, di mana sebenarnya konfigurasi disimpan? Saya ingin menghapus pengaturan yang disimpan untuk kembali ke keadaan default, tetapi tidak dapat menemukan di mana itu disimpan ... ada ide?

Adam Haile
sumber

Jawaban:

100

Ini tergantung pada apakah pengaturan yang Anda pilih berada pada lingkup "Pengguna" atau lingkup "Aplikasi".

Cakupan pengguna

Pengaturan lingkup pengguna disimpan di

C: \ Dokumen dan Pengaturan \ nama pengguna \ Pengaturan Lokal \ Data Aplikasi \ Nama Aplikasi

Anda dapat membaca / menulisnya saat runtime.

Untuk Vista dan Windows 7, foldernya adalah

C: \ Users \ username \ AppData \ Local \ ApplicationName

atau

C: \ Users \ username \ AppData \ Roaming \ ApplicationName

Ruang lingkup aplikasi

Pengaturan cakupan aplikasi disimpan AppName.exe.configdan hanya dapat dibaca pada saat runtime.

SolutionYogi
sumber
20
Folder untuk pengaturan cakupan pengguna di Vista dan Win7 adalah C: \ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version atau C: \ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version tergantung pada nilai properti Roaming pada panel Pengaturan.
jakdep
4
kecuali itu adalah addin, dalam hal ini akan menjadi AppName.dll.config
Anonymous Type
4
User.config lokal saya di Windows 7 ada di C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder
53

Berikut adalah potongan yang dapat Anda gunakan untuk secara terprogram mendapatkan lokasi file user.config:

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

ApplicationSettings (mis. Settings.settings) menggunakan PerUserRoamingAndLocal untuk pengaturan pengguna secara default (seperti yang saya ingat).

Pembaruan: Aneh tetapi ada terlalu banyak jawaban yang salah di sini. Jika Anda mencari file pengaturan cakupan pengguna Anda (user.config), itu akan ditempatkan di folder berikut (untuk Windows XP):

C: \ Documents and Settings \ (nama pengguna) \ Pengaturan Lokal \ Data Aplikasi \ (nama-perusahaan-jika-ada) \ (nama-aplikasi) .exe_ (Url | Nama Kuat) _ (hash) \ (versi-aplikasi) \

Url atau StrongName tergantung pada apakah Anda memiliki nama kuat rakitan aplikasi atau tidak.

wasit
sumber
Tahu apa yang berkontribusi pada hash di jalur itu? Setiap rilis aplikasi saya berikutnya mendapatkan nilai hash yang berbeda, yang membuat pemanggilan ApplicationSettingsBase.Upgrade () menjadi sia-sia. : /
Mal Ross
2
Hash adalah hash SHA1 dari StrongName saat aplikasi ditandatangani atau jalur saat aplikasi tidak ditandatangani. Selengkapnya di sini msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
arbiter
20

Dengan asumsi bahwa Anda berbicara tentang desktop dan bukan aplikasi web:

Saat Anda menambahkan pengaturan ke proyek, VS membuat file bernama app.configdalam direktori proyek Anda dan menyimpan pengaturan di file itu. Itu juga membangun Settings.csfile yang menyediakan aksesor statis ke pengaturan individu.

Pada waktu kompilasi, VS akan (secara default; Anda dapat mengubah ini) menyalin app.configke direktori build, mengubah namanya agar sesuai dengan yang dapat dieksekusi (misalnya jika file yang dapat dieksekusi dinamai foo.exe, file akan dinamai foo.exe.config), yaitu nama the. Manajer konfigurasi NET mencari ketika mengambil pengaturan saat runtime.

Jika Anda mengubah pengaturan melalui editor pengaturan VS, itu akan memperbarui app.configdan Settings.cs. (Jika Anda melihat pengakses properti dalam kode yang dihasilkan di Settings.cs, Anda akan melihat bahwa mereka ditandai dengan atribut yang berisi nilai default dari pengaturan yang ada di app.configfile Anda .) Jika Anda mengubah pengaturan dengan mengedit app.configfile secara langsung, Settings.cstidak akan diperbarui, tetapi nilai baru akan tetap digunakan oleh program Anda saat Anda menjalankannya, karena app.configakan disalin ke foo.exe.configpada waktu kompilasi. Jika Anda menonaktifkannya (dengan menyetel properti file), Anda dapat mengubah setelan dengan langsung mengedit foo.exe.configfile di direktori build.

Lalu ada pengaturan cakupan pengguna.

Pengaturan lingkup aplikasi hanya-baca. Program Anda dapat mengubah dan menyimpan pengaturan lingkup pengguna, sehingga memungkinkan setiap pengguna memiliki pengaturannya sendiri. Pengaturan ini tidak disimpan dalam foo.exe.configfile (karena di bawah Vista, setidaknya, program tidak dapat menulis ke subdirektori mana pun Program Filestanpa elevasi); mereka disimpan dalam file konfigurasi di direktori data aplikasi pengguna.

Path ke file itu adalah %appdata%\%publisher_name%\%program_name%\%version%\user.config, mis C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Perhatikan bahwa jika Anda telah memberi program Anda nama yang kuat, nama kuat tersebut akan ditambahkan ke nama program di jalur ini.

Robert Rossney
sumber
1
Sepertinya komponen My_Company dari jalur tersebut akan menjadi default ke Microsoft. Saya belum menemukan cara untuk mengubah ini yang benar-benar berfungsi, jika seseorang tahu itu bagus untuk ditambahkan.
1
user565869, sudahkah Anda mencoba di studio visual, buka tab aplikasi properti proyek, klik tombol informasi perakitan dan Anda kemudian dapat mengubah Perusahaan? ulangi itu untuk setiap proyek dalam solusi Anda
gg89
15

Saat menjelajah untuk mencari tahu tentang hash di nama folder, saya menemukan (melalui jawaban ini ):

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

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

Jalur user.configfile yang tepat terlihat seperti ini:

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

dimana

<Profile Directory>- adalah direktori profil roaming atau direktori lokal. Pengaturan disimpan secara default di user.configfile lokal . Untuk menyimpan pengaturan dalam user.configfile roaming , Anda perlu menandai pengaturan dengan SettingsManageabilityAttributedengan SettingsManageabilityset ke Roaming.

<Company Name>- biasanya string yang ditentukan oleh AssemblyCompanyAttribute(dengan peringatan bahwa string tersebut di-escape dan dipotong seperlunya, dan jika tidak ditentukan pada assembly, kami memiliki prosedur fallback).

<App Name>- biasanya string yang ditentukan oleh AssemblyProductAttribute(peringatan yang sama seperti untuk nama perusahaan).

<Evidence Type>dan <Evidence Hash>- informasi yang diperoleh dari bukti domain aplikasi untuk menyediakan domain aplikasi dan isolasi assembly yang tepat.

<Version>- biasanya versi yang ditentukan dalam AssemblyVersionAttribute. Ini diperlukan untuk mengisolasi berbagai versi aplikasi yang diterapkan secara berdampingan.

Nama file selalu sederhana ' user.config'.

pencari
sumber
Sayangnya link blog tersebut rusak. Saya yakin itu akan menarik.
UweBaemayr
3

Itu ada di folder dengan nama aplikasi Anda di folder Data Aplikasi di folder utama Pengguna (C: \ documents and settings \ user di xp dan c: \ users \ user di Windows Vista).

Ada juga beberapa informasi di sini .

PS: - coba akses dengan% appdata% di kotak run!

TheVillageIdiot
sumber
2

Erm, dapatkah Anda tidak hanya menggunakan Settings.Default.Reset () untuk mengembalikan pengaturan default Anda?

Kildareflare
sumber
1

Semua pengaturan Anda disimpan di file .config masing-masing.

File .settings hanya menyediakan kelas yang diketik dengan kuat untuk satu set pengaturan yang dimiliki bersama, tetapi pengaturan sebenarnya disimpan di app.config atau file .config di aplikasi Anda.

Jika Anda menambahkan file .settings, app.config akan secara otomatis ditambahkan ke pengaturan rumah jika Anda belum memilikinya.

Praveen Angyan
sumber
1

Jika file setelan Anda ada di aplikasi web, file itu akan ada di file web.config (tepat di bawah proyek Anda. Jika ada di jenis proyek lain, mereka akan ada di file app.config (juga di bawah proyek Anda) .

Edit

Seperti yang ditunjukkan di komentar: pengaturan aplikasi waktu desain Anda ada dalam file app.config untuk aplikasi selain aplikasi web. Saat Anda membangun, file app.config disalin ke direktori output, dan akan diberi nama yourexename .exe.config. Saat runtime, hanya file bernama yourexename.exe.config yang akan dibaca.

JMarsch
sumber
1
Tidak benar. Tidak ada file pengaturan app.config dalam menjalankan aplikasi, karena app.config akan diganti namanya menjadi [appname] .exe.config. Dan bagaimanapun juga file ini hanya akan berisi pengaturan ApplicationScoped dari settings.settins.
wasit
@arbiter: Mungkin saya salah memahami pertanyaan itu, tetapi Adam tampaknya bertanya tentang default waktu desain. Itu disimpan di app.config. Pada waktu pembuatan, file app.config disalin ke direktori pembuatan dan diganti namanya menjadi (theapp.exe.config). Namun, jika Anda mengedit file itu secara langsung (dan bekerja di studio visual), Anda berisiko konten ditimpa saat Anda membuatnya. Intinya: Untuk aplikasi yang diterapkan (atau jika Anda menjalankan di luar IDE), ubah file name.exe.config). Jika Anda bekerja di VS, ubah baik nilai default di pengaturan, atau app.config
JMarsch
0

Dua file: 1) File app.config atau web.config. Pengaturannya bisa disesuaikan setelah dibangun dengan text editer. 2) File settings.designer.cs. File ini memiliki kode yang dibuat secara otomatis untuk memuat pengaturan dari file konfigurasi, tetapi nilai default juga ada jika file konfigurasi tidak memiliki pengaturan tertentu.

Frank Schwieterman
sumber
0

Saya tahu ini sudah dijawab tetapi tidak bisakah Anda hanya menyinkronkan pengaturan di perancang pengaturan untuk kembali ke pengaturan default Anda?

jrsconfitto
sumber