2009-01-16 52 views
14

Tôi bị kẹt! điều này có vẻ thực sự daft nhưng tôi không thể nhìn thấy nơi tôi đang đi sai. Tôi đang tạo một trang web 2.0 C# ASP.NET. Tôi đang cố gắng sử dụng phần tùy chỉnh trong tệp web.config với:C# ConfigurationManager.GetSection không thể tải tệp hoặc lắp ráp

DatabaseFactorySectionHandler sectionHandler = ConfigurationManager.GetSection("DatabaseFactoryConfiguration") as DatabaseFactorySectionHandler; 

Tôi có một DLL riêng biệt cho các đối tượng nằm trong không gian tên Bailey.DataLayer. Nhưng khi tôi chạy trang test.aspx tôi nhận được lỗi sau:

System.Configuration.ConfigurationErrorsException was unhandled by user code 

Message="An error occurred creating the configuration section handler for DatabaseFactoryConfiguration: Could not load file or assembly 'Bailey.DataLayer' or one of its dependencies. The system cannot find the file specified. (C:\\Documents and Settings\\Administrator.PIP\\My Documents\\Visual Studio 2005\\WebSites\\bailey\\web.config line 13)" 
Source="System.Configuration" 

Lớp mà tôi đang cố gắng để có được như sau: tập tin cấu hình

namespace Bailey.DataLayer 
{ 
    public sealed class DatabaseFactorySectionHandler : ConfigurationSection 
    { 
     [ConfigurationProperty("Name")] 
     public string Name 
     { 
      get { return (string)base["Name"]; } 
     } 

     [ConfigurationProperty("ConnectionStringName")] 
     public string ConnectionStringName 
     { 
      get { return (string)base["ConnectionStringName"]; } 
     } 

     public string ConnectionString 
     { 
      get 
      { 
       try 
       { 
        return ConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString; 
       } 
       catch (Exception excep) 
       { 
        throw new Exception("Connection string " + ConnectionStringName + 
             " was not found in web.config. " + 
             excep.Message); 
       } 
      } 
     } 
    } 
} 

Các web có phần này:

<configSections> 
    <section name="DatabaseFactoryConfiguration" 
      type="Bailey.DataLayer.DatabaseFactorySectionHandler, Bailey.DataLayer" /> 
</configSections> 

Tôi đã thực hiện việc này trong ứng dụng bảng điều khiển mà không gặp sự cố nhưng không thể thấy bất kỳ khác biệt nào ngoài việc ở trong trang web.

EDIT

Tất cả biên dịch và ném các lỗi khi chạy vì vậy tôi chỉ có thể giả định nó tìm lắp ráp bởi vì nó được tham chiếu trong trang test.aspx.cs.

Tôi có tiền chỉ thị sau tuyên bố ở phía trên cùng của trang test.aspx.cs:

using Bailey.DataLayer; 

Dưới đây là toàn bộ file web.config như vậy không có sự nhầm lẫn:

<configuration> 
    <configSections> 
     <section name="DatabaseFactoryConfiguration" type="Bailey.DataLayer.DatabaseFactorySectionHandler, Bailey.DataLayer" /> 
    </configSections> 
    <appSettings/> 
    <connectionStrings> 
     <add name="BaileyMDFConString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\bailey.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <DatabaseFactoryConfiguration Name="System.Data.SqlClient" ConnectionStringName="BaileyMDFConString" /> 
    <system.web>   
     <compilation debug="true"/>  
     <authentication mode="Windows"/> 
    </system.web> 
</configuration> 
+0

Bản thân phần cấu hình tùy chỉnh thực tế ở đâu? –

+0

Cũng có vấn đề của bạn ... Bạn không thực sự có phần tùy chỉnh. –

+0

Có ở đó, nhưng tôi không thể lấy XML từ tệp cấu hình để hiển thị chính xác hoặc ngay bây giờ! – Jon

Trả lời

25

Hoặc bạn đang sử dụng sai tên (ví dụ: nó không được gọi là Bailey.DataLayer.dll), hoặc nó không được sao chép vào thư mục bin vào xây dựng. Điều cuối cùng này dường như không có khả năng.

(Xem nhận xét của tôi về câu hỏi để làm rõ).

+5

Cảm ơn bạn Andrew! Nó nhấp vào tên DLL đã không được tham chiếu trong cấu hình web.Tôi đã không realiize rằng nó đã được DLL thực sự tôi đã phải đặt, tôi nghĩ rằng nó chỉ là không gian tên – Jon

+0

đây http://msdn.microsoft.com/en-en/library/2tw134k3.aspx descibed quá trình tạo phần cấu hình.Và có một điều mà lắp ráp với phần nên bằng trên cùng cấp như webconfig nơi bạn muốn sử dụng nó, như là: Bao gồm lắp ráp xác định phần trong cùng thư mục với tệp Web.config. –

4

Bạn cần hai mục trong tệp cấu hình, một mục trên phần tử configSections để khai báo phần cấu hình tùy chỉnh và một phần khác - phần cấu hình tùy chỉnh thực tế. Bạn đã thêm cả hai?

ví dụ:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <configSections> 
    **<section name="Connections" 
      type="System.Configuration.DictionarySectionHandler" />** 
    </configSections> 

    <Connections 
     <add key="myServer" value="serverName" /> 
     <add key="myPort" value="8080" /> 
     <add key="myURI" value="RequestUri" /> 
     <add key="UserId" value="joebob" /> 
     <add key="password" value="$^%^&%$^&@%" />   
    /> 

</configuration> 
+0

Xin chào Charles, tôi đã chỉnh sửa bài đăng của mình để thử và hiển thị toàn bộ tệp cấu hình (không hiển thị đúng atm. Nhưng tôi tin điều đó là chính xác. Tôi không biết về DictionarySectionHandler, cái nào hay và tôi sẽ sử dụng trong tương lai. thx – Jon

+0

+1 cho tip về System.Configuration.DictionarySectionHandler - làm cho mọi thứ SO dễ dàng hơn nhiều cho tôi! – paulH

4

Ok ... Tôi đã gặp vấn đề tương tự. Không có giải pháp nào ở trên giúp được. Trong trường hợp của tôi tập tin cấu hình của tôi là trong cùng một dll như của web.config. Tôi chỉ đơn giản là loại bỏ các không gian tên từ phần cấu hình và cố định vấn đề của tôi.

Không làm việc

<configSections> 
<section name="authorizedServerSection" type="ProjectName.ClientApi.Filters.AuthorizedServerSection, ProjectName.ClientApi.Filters" requirePermission="false"/> 

Working

<configSections> 
<section name="authorizedServerSection" type="ProjectName.ClientApi.Filters.AuthorizedServerSection" requirePermission="false"/> 

Ngay sau khi tôi loại bỏ các namespace , ProjectName.ClientApi.Filters nó bắt đầu hoạt động.

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