8

Tôi muốn đọc/ghi (và tiết kiệm) tập tin cấu hình ứng dụng trong chương trìnhConfigurationProperty là không thể tiếp cận do mức độ bảo vệ của nó

Các app.config là như thế này:

<configuration> 
    <configSections> 
    <section name="AdWordsApi" type="System.Configuration.DictionarySectionHandler" requirePermission="false"/> 
    </configSections> 
    <AdWordsApi> 
    <add key="LogPath" value=".\Logs\"/> 
    ... 
    </AdWordsApi> 
</configuration> 

Khi tôi sử dụng ConfigurationManager.GetSection để đọc app.config, nó hoạt động:

var adwords_section = (System.Collections.Hashtable) System.Configuration.ConfigurationManager.GetSection("AdWordsApi"); 
Console.WriteLine((string)adwords_section["LogPath"]); 

B ut khi tôi sử dụng ConfigurationManager.OpenExeConfiguration:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
ConfigurationSection section = config.GetSection("AdWordsApi"); 
Console.WriteLine(section["LogPath"]); 

tôi luôn luôn nhận được lỗi này:

'System.Configuration.ConfigurationElement.this[System.Configuration.ConfigurationProperty]' is inaccessible due to its protection level

Nhưng như tôi biết, GetSection không thể lưu cấu hình khi chạy chương trình, Như tôi đã nói ngay từ đầu : Tôi muốn lưu cấu hình trong thời gian chạy chương trình, Vì vậy, tôi phải sử dụng OpenExeConfiguration.

Tôi đã googled cho thời gian dài, những gì tôi thấy là sử dụng AppSettings, nhưng những gì tôi sử dụng phần tùy chỉnh là ..

Bất cứ ai có thể giải thích tại sao điều này "ConfigurationProperty là không thể tiếp cận" lỗi xảy ra? Cảm ơn

Edit:

tôi đã thiết bản sao cục bộ của Hệ thốngSystem.Configuration để đúng

Trả lời

12

Bạn có thể sử dụng this article.

Edit:

bạn có thể sử dụng cấu hình:

<configSections> 
    <section name="AdWordsApi.appSettings" type="System.Configuration.AppSettingsSection" /> 
    </configSections> 
    <AdWordsApi.appSettings> 
    <add key="LogPath" value=".\Logs\"/> 
    </AdWordsApi.appSettings> 

mã này:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
    var settings = config.GetSection("AdWordsApi.appSettings") as AppSettingsSection; 
    if (settings != null) Console.Write(settings.Settings["LogPath"].Value); 
    Console.ReadLine(); 

Ngoài ra Bạn có thể sử dụng this article.

+0

Tôi đã xác định AdwordsSettings là lớp con của ConfigurationSection như bạn đã nói: http: //pastecode.com/jF và chương trình dừng ở đây: string path = AdwordsSettings.Settings.LogPath với một NullReferenceException (Object không được thiết lập cho một thể hiện của một đối tượng) –

+0

Và khi chương trình dừng lại ở đó, tôi tìm thấy AdwordsSettings.Cài đặt là ** null ** trong trình gỡ lỗi –

+0

@gbstack, bạn nên đọc bài viết đó chi tiết hơn hoặc xem qua các bài viết tương tự để hiểu rõ hơn về hệ thống cấu hình, http://www.codeproject.com/KB/dotnet /mysteriesofconfiguration.aspx. Lỗi ban đầu của bạn được mong đợi khi bạn hiểu sai cách đọc phần. –

1

Tôi không chắc chắn nếu nó sẽ làm việc cho những gì bạn đang cố gắng thực hiện, nhưng bạn đã thử sử dụng ConfigurationUserLevel.None chưa?

+0

Cảm ơn, nhưng sau khi sử dụng ConfigurationUserLevel.None và ConfigurationUserLevel.PerUserRoaming, tôi vẫn gặp lỗi tương tự .. –

10

string key_value = refconfig.AppSettings.Settings ["key_name"].

+0

đó là những gì cố định mã của tôi anyway ... bắt nguồn từ này "Configuration.AppSettings trả về một đối tượng AppSettingSections, AppSettingSections có nguồn gốc từ ConfigurationSection có nguồn gốc từ ConfigurationElement xác định một toán tử [] này là" protected internal ", có nghĩa là" không thể truy cập được do mức độ bảo vệ ", có nghĩa là" không thể truy cập được do mức bảo vệ của nó ". Bạn có thể muốn thử cs.AppSettings.Settings [" CompanyName "]);" – pcalkins

+0

đẹp - đã làm việc cho tôi và đã lưu tôi phải cấu hình lại các cài đặt cấu hình của mình. cảm ơn. – soupy1976

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