2009-02-10 38 views
7

Có cách nào mà tôi có thể chỉ định khi chạy tệp cấu hình mà tôi muốn sử dụng (ngoài App.config) không? Ví dụ tôi muốn đọc một đối số đầu tiên từ một dòng lệnh sẽ là một đường dẫn đến cấu hình của ứng dụng và tôi muốn ứng dụng của tôi tham chiếu đến nó khi tôi sử dụng ConfigurationManager.AppSettings (Có thể là không thể nhưng vẫn đáng để hỏi).
Tôi đã tìm thấy đoạn mã này:Tệp cấu hình riêng của .NET

System.Configuration.Configuration config 
    = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     config.AppSettings.File = myRuntimeConfigFilePath; 
     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("appSettings"); 

Nó hoạt động, nhưng nó sẽ ghi đè phần AppSettings bản gốc App.config và ứng dụng của tôi không phải viết bất cứ điều gì.

Trả lời

9

Tôi đã tìm thấy mục này và nó hoạt động. "đường dẫn" là đường dẫn đến tệp cấu hình.

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); 
4

Không trực tiếp.

gián tiếp, bạn có thể:

  • quay lên một giây AppDomain, chỉ rõ config-file cho rằng (AppDomainSetup.ConfigurationFile), và thực thi mã trong lĩnh vực ứng dụng
  • có hai người yêu cũ; là người đầu tiên (foo.exe) chỉ đơn giản là sao chép cấu hình (vào bar.exe.config) và vỏ exe 2 (bar.exe) [cảnh báo: chủ đề chủng tộc]
+0

ý bạn là gì khi "thực thi mã trong miền ứng dụng"? – agnieszka

+0

Đó là một chủ đề lớn ... về cơ bản, trong .NET bạn có một mức trừu tượng bên trong một Process - AppDomain. Xem msdn: http://msdn.microsoft.com/en-us/library/yb506139.aspx –

0

Nếu bạn đang sử dụng log4net bạn có thể chỉ định tập tin cấu hình của bạn trong AssemblyInfo.cs

0

Một giải pháp khác là tái cấu trúc và tạo ConfigurationRepository của riêng bạn. Sau đó, bạn có thể thay đổi vào thời gian chạy triển khai kho lưu trữ cụ thể mà bạn sẽ sử dụng.

Ví dụ: AppConfigRepository : ConfigurationRespository sẽ chỉ là mặt tiền cho cũ ConfigurationManager.AppSettings["key"].

+0

Tôi đã biết về nó nhưng tôi đang tìm kiếm một cái gì đó đơn giản hơn để tôi không phát minh lại bánh xe (nếu nó tồn tại;)) – agnieszka

Các vấn đề liên quan