2010-05-25 25 views
18

Tôi có một DLL cung cấp đăng nhập mà tôi sử dụng cho các dự án WebForms và bây giờ muốn sử dụng nó trong một dự án ASP.Net MVC 2.applicationSettings và Web.config

Một số khía cạnh của DLL mà được cấu hình trong app.config:

<configuration> 
    <configSections> 
      <section name="Tools.Instrumentation.Properties.Settings" 
        type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
        requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 

<applicationSettings> 
     <Tools.Instrumentation.Properties.Settings> 
      <setting name="LogLevel" serializeAs="String"> 
       <value>DEBUG</value> 
      </setting> 
      <setting name="AppName" serializeAs="String"> 
       <value>MyApp</value> 
      </setting> 
      <setting name="Port" serializeAs="String"> 
       <!--value>33333</value--> 
       <value>0</value> 
      </setting> 
     </Tools.Instrumentation.Properties.Settings> 
    </configuration>  

Tuy nhiên, khi tôi tạo một mục nhập tương tự trong Web.config, tôi nhận được lỗi:

Unrecognized configuration section applicationSettings

My hai phần câu hỏi:

  • Làm cách nào để làm cho mục nhập cấu hình này hoạt động trong Web.config?
  • Tôi có thể đọc về sự khác biệt về khái niệm giữa cấu hình WinForms và cấu hình ASP.Net ở đâu?

Trả lời

48

tập tin cấu hình của bạn đã chỉ thiếu nhóm phần applicationSettings:

<configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="Tools.Instrumentation.Properties.Settings" 
       type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
       requirePermission="false" /> 
    </sectionGroup> 
</configSections> 

Nếu bạn thêm rằng, bạn có thể đặt phần Cài đặt của bạn bên trong thẻ và lắp ráp của bạn nên đọc từ nó như bình thường.

+6

Tôi có linh cảm rằng đây là câu trả lời hay hơn. –

+0

Thật vậy. Chấp nhận nó. –

+1

Trong trường hợp bất kỳ ai khác bị nhầm lẫn, 'sectionGroup' có thể được sao chép trực tiếp từ tệp' * .dll.config' vào phần 'config.config' của tệp' web.config'. Sau đó, phần 'applicationSettings' có thể được sao chép giống như nó. – cjbarth

3

Lưu ý thuộc tính name của phần?

hãy thử gỡ bỏ yếu tố của bạn từ <applicationSettings> wrapper

<Tools.Instrumentation.Properties.Settings> 
     <setting name="LogLevel" serializeAs="String"> 
      <value>DEBUG</value> 
     </setting> 
     <setting name="AppName" serializeAs="String"> 
      <value>MyApp</value> 
     </setting> 
     <setting name="Port" serializeAs="String"> 
      <!--value>33333</value--> 
      <value>0</value> 
     </setting> 
    </Tools.Instrumentation.Properties.Settings> 

Bây giờ bạn có thể sử dụng phần này. Nhưng bạn không có lớp trình bao bọc được tạo ra, bạn sẽ cần phải thực hiện thêm một ít công việc để có được các giá trị của mình bằng cách sử dụng ConfigurationManager.

Đối với phần thứ hai của câu hỏi, từ một góc độ, có ít hoặc không có sự khác biệt về cách các tệp cấu hình được xử lý bởi ứng dụng web so với ứng dụng biểu mẫu.

Một sự khác biệt nổi bật có thể có hoặc không liên quan ở đây là cách tệp web.config có thể được ánh xạ theo địa lý, mỗi tệp tiếp theo có hiệu quả làm tăng hoặc sửa đổi cấu hình gốc, khi được cho phép. Nhưng đây là một sự khác biệt về hành vi như trái ngược với một sự khác biệt chức năng, theo ý kiến ​​của tôi.

4

Dưới đây là phiên bản .NET 4 của cấu hình mất tích:

<configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="Tools.Instrumentation.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
</configSections> 

Hãy chắc chắn để cập nhật các không gian tên của giá trị name thuộc tính 's <section> để phù hợp với riêng bạn.

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