Khi sử dụng tệp Settings.settings trong .NET, cấu hình thực sự được lưu trữ ở đâu?


100

Khi sử dụng tệp Settings.settings trong .NET, cấu hình thực sự được lưu trữ ở đâu? Tôi muốn xóa các cài đặt đã lưu để quay lại trạng thái mặc định, nhưng không tìm thấy nơi lưu trữ nó ... có ý kiến ​​gì không?

Câu trả lời:


100

Nó phụ thuộc vào việc cài đặt bạn đã chọn nằm ở phạm vi "Người dùng" hay "Ứng dụng".

Phạm vi người dùng

Cài đặt phạm vi người dùng được lưu trữ trong

C: \ Documents and Settings \ username \ Local Settings \ Application Data \ ApplicationName

Bạn có thể đọc / ghi chúng trong thời gian chạy.

Đối với Vista và Windows 7, thư mục là

C: \ Users \ tên người dùng \ AppData \ Local \ ApplicationName

hoặc là

C: \ Users \ tên người dùng \ AppData \ Roaming \ ApplicationName

Phạm vi ứng dụng

Cài đặt phạm vi ứng dụng được lưu trong AppName.exe.configvà chúng chỉ được đọc trong thời gian chạy.


20
Thư mục cài đặt phạm vi người dùng trên Vista và Win7 là C: \ Users \ tên người dùng \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Phiên bản hoặc C: \ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Phiên bản tùy thuộc vào giá trị thuộc tính Chuyển vùng trên ngăn Cài đặt.
jakdep

4
trừ khi nó một addin, trong trường hợp này nó sẽ được AppName.dll.config
Anonymous Loại

4
User.config địa phương của tôi trên Windows 7 là trong C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder

53

Đây là đoạn mã bạn có thể sử dụng để lấy vị trí tệp user.config theo chương trình:

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

ApplicationSettings (tức là settings.settings) sử dụng PerUserRoamingAndLocal cho cài đặt người dùng theo mặc định (như tôi đã nhớ).

Cập nhật: Lạ nhưng có quá nhiều câu trả lời sai ở đây. Nếu bạn đang tìm kiếm tệp cài đặt phạm vi người dùng (user.config), tệp này sẽ nằm trong thư mục sau (dành cho Windows XP):

C: \ Documents and Settings \ (tên người dùng) \ Local Settings \ Application Data \ (tên công ty-nếu-tồn tại) \ (app-name) .exe_ (Url | StrongName) _ (hash) \ (app-version) \

Url hoặc StrongName phụ thuộc vào việc bạn có lắp ráp ứng dụng tên mạnh hay không.


Bất kỳ ý tưởng nào đóng góp vào hàm băm trong đường dẫn đó? Mỗi bản phát hành tiếp theo của ứng dụng của tôi nhận được một giá trị băm khác nhau, điều này khiến việc gọi ApplicationSettingsBase.Upgrade () trở nên vô ích. : /
Mal Ross

2
Hash là hàm băm SHA1 của StrongName khi ứng dụng được ký hoặc đường dẫn khi ứng dụng chưa được ký. Xem thêm tại đây msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
trọng tài

20

Giả sử rằng bạn đang nói về máy tính để bàn chứ không phải ứng dụng web:

Khi bạn thêm cài đặt vào một dự án, VS sẽ tạo một tệp có tên app.configtrong thư mục dự án của bạn và lưu trữ các cài đặt trong tệp đó. Nó cũng xây dựng Settings.cstệp cung cấp các trình truy cập tĩnh cho các cài đặt riêng lẻ.

Tại thời điểm biên dịch, VS sẽ (theo mặc định; bạn có thể thay đổi điều này) sao chép app.configvào thư mục xây dựng, thay đổi tên của nó để phù hợp với tệp thực thi (ví dụ: nếu tệp thực thi của bạn được đặt tên foo.exe, tệp sẽ được đặt tên foo.exe.config), đó là tên. Trình quản lý cấu hình NET sẽ tìm kiếm khi nó truy xuất cài đặt trong thời gian chạy.

Nếu bạn thay đổi cài đặt thông qua trình chỉnh sửa cài đặt VS, nó sẽ cập nhật cả app.configSettings.cs. (Nếu bạn nhìn vào các trình truy cập thuộc tính trong mã được tạo trong Settings.cs, bạn sẽ thấy rằng chúng được đánh dấu bằng thuộc tính chứa giá trị mặc định của cài đặt có trong app.configtệp của bạn .) Nếu bạn thay đổi cài đặt bằng cách chỉnh sửa app.configtệp trực tiếp, Settings.cssẽ không được cập nhật, nhưng giá trị mới sẽ vẫn được chương trình của bạn sử dụng khi bạn chạy nó, vì app.configđược sao chép vào foo.exe.configlúc biên dịch. Nếu bạn tắt tính năng này (bằng cách đặt thuộc tính của tệp), bạn có thể thay đổi cài đặt bằng cách chỉnh sửa trực tiếp foo.exe.configtệp trong thư mục bản dựng.

Sau đó, có cài đặt phạm vi người dùng.

Cài đặt phạm vi ứng dụng ở chế độ chỉ đọc. Chương trình của bạn có thể sửa đổi và lưu cài đặt phạm vi người dùng, do đó cho phép mỗi người dùng có cài đặt của riêng mình. Các cài đặt này không được lưu trữ trong foo.exe.configtệp (ít nhất vì trong Vista, các chương trình không thể ghi vào bất kỳ thư mục con nào Program Filesmà không có độ cao); chúng được lưu trữ trong một tệp cấu hình trong thư mục dữ liệu ứng dụng của người dùng.

Đường dẫn đến tệp đó là %appdata%\%publisher_name%\%program_name%\%version%\user.config, ví dụ C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Lưu ý rằng nếu bạn đã đặt tên mạnh cho chương trình của mình, thì tên mạnh sẽ được thêm vào tên chương trình trong đường dẫn này.


1
Có vẻ như thành phần My_Company của đường dẫn sẽ được mặc định thành Microsoft. Tôi vẫn chưa tìm ra cách để thay đổi điều này thực sự hoạt động, nếu ai đó biết điều đó sẽ tốt để thêm vào.

1
user565869, bạn đã thử trong studio trực quan, mở tab ứng dụng của thuộc tính dự án, nhấp vào nút thông tin lắp ráp và sau đó bạn có thể thay đổi Công ty không? lặp lại điều đó cho mỗi dự án trong giải pháp của bạn
gg89

15

Trong khi duyệt xung quanh để tìm hiểu về hàm băm trong tên thư mục, tôi đã xem qua (thông qua câu trả lời này ):

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

(chỉnh sửa: Liên kết Wayback Machine: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

Đường dẫn chính xác của các user.configtệp trông giống như sau:

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

Ở đâu

<Profile Directory>- là thư mục hồ sơ chuyển vùng hoặc thư mục cục bộ. Cài đặt được lưu trữ theo mặc định trong user.configtệp cục bộ . Để lưu một cài đặt trong user.configtệp chuyển vùng , bạn cần đánh dấu cài đặt SettingsManageabilityAttributevới SettingsManageabilitycài đặt thành Roaming.

<Company Name>- thường là chuỗi được chỉ định bởi AssemblyCompanyAttribute(với cảnh báo rằng chuỗi được thoát và cắt bớt khi cần thiết, và nếu không được chỉ định trên hợp ngữ, chúng tôi có một thủ tục dự phòng).

<App Name>- thường là chuỗi được chỉ định bởi AssemblyProductAttribute(lưu ý tương tự như đối với tên công ty).

<Evidence Type><Evidence Hash>- thông tin thu được từ bằng chứng miền ứng dụng để cung cấp miền ứng dụng phù hợp và cách ly lắp ráp.

<Version>- thường là phiên bản được chỉ định trong AssemblyVersionAttribute. Điều này là bắt buộc để cô lập các phiên bản khác nhau của ứng dụng được triển khai song song.

Tên tệp luôn đơn giản là ' user.config'.


Thật không may, liên kết blog bị hỏng. Tôi chắc rằng nó sẽ rất thú vị.
UweBaemayr

3

Nó nằm trong một thư mục có tên ứng dụng của bạn trong thư mục Dữ liệu Ứng dụng trong thư mục chính của Người dùng (C: \ Documents and settings \ user trên xp và c: \ users \ user trên Windows Vista).

Cũng có một số thông tin ở đây .

Tái bút: - hãy thử truy cập nó bằng% appdata% trong hộp chạy!


2

Erm, bạn có thể không chỉ sử dụng Settings.Default.Reset () để khôi phục cài đặt mặc định của mình không?


1

Tất cả cài đặt của bạn được lưu trữ trong tệp .config tương ứng.

Tệp .settings chỉ đơn giản cung cấp một lớp được đánh mạnh cho một tập hợp các cài đặt thuộc về nhau, nhưng các cài đặt thực tế được lưu trữ trong app.config hoặc tệp .config trong ứng dụng của bạn.

Nếu bạn thêm tệp .settings, một app.config sẽ tự động được thêm vào nơi chứa cài đặt nếu bạn chưa có.


1

Nếu tệp cài đặt của bạn nằm trong ứng dụng web, chúng sẽ nằm trong tệp teh web.config (ngay bên dưới dự án của bạn. Nếu chúng nằm trong bất kỳ loại dự án nào khác, chúng sẽ nằm trong tệp app.config (cũng bên dưới dự án của bạn) .

Biên tập

Như đã chỉ ra trong các nhận xét: cài đặt ứng dụng thời gian thiết kế của bạn nằm trong tệp app.config cho các ứng dụng khác với ứng dụng web. Khi bạn xây dựng, tệp app.config được sao chép vào thư mục đầu ra và sẽ được đặt tên là yourexename .exe.config. Trong thời gian chạy, chỉ tệp có tên yourexename.exe.config mới được đọc.


1
Không chính xác. Không có tệp cài đặt app.config trong ứng dụng đang chạy, vì app.config sẽ được đổi tên thành [appname] .exe.config. Và dù sao thì tệp này sẽ chỉ chứa các cài đặt ApplicationScoped từ settings.settins.
trọng tài

@arbiter: Có lẽ tôi đã hiểu sai câu hỏi, nhưng Adam dường như đang hỏi về mặc định thời gian thiết kế. Chúng được lưu trữ trong app.config. Tại thời điểm xây dựng, tệp teh app.config được sao chép vào thư mục xây dựng và được đổi tên thành (theapp.exe.config). Tuy nhiên, nếu bạn chỉnh sửa tệp đó trực tiếp (và đang làm việc trong studio trực quan), bạn có nguy cơ bị ghi đè nội dung vào lần tạo tiếp theo. Điểm mấu chốt: Đối với một ứng dụng đã triển khai (hoặc nếu bạn đang chạy bên ngoài IDE), hãy thay đổi tệp teh name.exe.config). Nếu bạn đang làm việc trong VS, thay đổi một trong hai giá trị mặc định trong cài đặt, hoặc App.config
JMarsch

0

Hai tệp: 1) Tệp app.config hoặc web.config. Các cài đặt cô ấy có thể được tùy chỉnh sau khi xây dựng bằng trình chỉnh sửa văn bản. 2) Tệp settings.designer.cs. Tệp này có mã được tạo tự động để tải cài đặt từ tệp cấu hình, nhưng giá trị mặc định cũng có trong trường hợp tệp cấu hình không có cài đặt cụ thể.


0

Tôi biết nó đã được trả lời nhưng bạn không thể đồng bộ hóa cài đặt trong trình thiết kế cài đặt để chuyển về cài đặt mặc định của mình?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.