2009-11-05 22 views
15

Tôi muốn lấy khóa AppSetting từ tập tin cấu hình assembly được gọi là: MyAssembly.dll.config. Dưới đây là một mẫu của các tập tin cấu hình:Làm thế nào để lấy AppSettings từ tập tin cấu hình assembly?

<configuration> 
    <appSettings> 
     <add key="MyKey" value="MyVal"/> 
    </appSettings> 
</configuration> 

Dưới đây là đoạn code để lấy nó:

var myKey = ConfigurationManager.AppSettings["MyKey"]; 
+0

trùng lặp có thể xảy ra của [làm thế nào tôi có thể đọc/ghi app.config thiết lập tại witho runtime ut sử dụng cài đặt người dùng?] (https://stackoverflow.com/questions/3638754/how-can-i-read-write-app-config-settings-at-runtime-without-using-user-settings) – Matt

Trả lời

20

Sử dụng OpenMappedExeConfiguration cung cấp cho bạn trở lại đối tượng "Cấu hình" mà bạn có thể sử dụng để nhìn vào cấu hình của thư viện lớp học và các cài đặt tồn tại sẽ ghi đè lên cùng tên trong ứng dụng chính config):

ExeConfigurationFileMap map = new ExeConfigurationFileMap(); 
map.ExeConfigFilename = "ConfigLibrary.config"; 

Configuration libConfig = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

AppSettingsSection section = (libConfig.GetSection("appSettings") as AppSettingsSection); 
value = section.Settings["Test"].Value; 

Nhưng những thiết lập mà là duy nhất để cấu hình các ứng dụng chính và không tồn tại trong cấu hình riêng các thư viện lớp của vẫn truy cập qua ConfigurationManager lớp tĩnh:

chuỗi nối tiếp = ConfigurationManager.AppSettings ["Nối tiếp"];

Điều đó vẫn hoạt động - cấu hình của thư viện lớp chỉ ẩn các cài đặt bên trong tệp cấu hình của thư viện đó; Ngoài ra, bạn cũng cần phải sử dụng cá thể "libConfig" để có quyền truy cập vào cài đặt cấu hình của thư viện lớp học, quá

Hai thế giới (app.config, classlibrary.config) hoàn toàn có thể và rất hạnh phúc cùng tồn tại - không phải vấn đề ở đó chút nào!

Marc

+1

Nếu tôi không có nút ứng dụng trong tệp cấu hình tùy chỉnh của mình thì sao? Tôi có nút . Vậy làm thế nào để có được các nút mà không cần sử dụng AppSettingsSection? – Shesha

0
var uri = new Uri(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)); 
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = Path.Combine(uri.LocalPath, "MyAssembly.dll.config") }; 
var assemblyConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
+0

không thực sự - bạn sẽ nhận được một đối tượng "Cấu hình" từ cuộc gọi OpenMappedExeCOnfiguration và nếu bạn sử dụng nó, thì bạn nhìn vào bên trong tệp cấu hình được ánh xạ của bạn, nhưng nếu bạn sử dụng 'ConfigurationManager.AppSettings []', bạn vẫn nhận được ứng dụng chính cấu hình. –

0

Bạn cũng có thể mở nó lên như một XmlDocument và điều hướng các tài liệu với XPath. Do đó, luôn có LinqToXml

6
var appSettings = ConfigurationManager.OpenExeConfiguration((Assembly.GetAssembly(typeof(MYASSEMBLY))).Location).AppSettings; 

sau đó bạn có thể làm như trên.

-1
Using System.Configuration 
Public Shared Function AppDomainConfiguration() As Configuration 
    Dim fileMap As New ExeConfigurationFileMap 
    fileMap.ExeConfigFilename = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 
    Return ConfigurationManager.OpenMappedExeConfiguration(fileMap,Configuration.ConfigurationUserLevel.None) 
End Function 
Các vấn đề liên quan