2013-09-30 20 views
20

app.config tập tin của tôi là như sau:ConfigurationManager.GetSection Cho Lỗi "Không thể tải loại .... từ lắp ráp ..."

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="ProcessConfiguration" type="Configuration.ProcessConfigurationSection, Configuration" /> 
    </configSections> 
    <ProcessConfiguration> 
     <processes> 
      <process name="Process1" /> 
     </processes> 
    </ProcessConfiguration> 
</configuration> 

Tôi có các lớp học (riêng biệt) sau đây để có được cấu hình:

namespace Configuration 
{ 
    using System.Configuration; 

    public class ProcessesConfigurationSection : ConfigurationSection 
    { 
     [ConfigurationProperty("processes", IsDefaultCollection = false)] 
     [ConfigurationCollection(typeof(ProcessCollection))] 
     public ProcessCollection Processes 
     { 
      get 
      { 
       return (ProcessCollection)base["processes"]; 
      } 
     } 
    } 
} 

namespace Configuration 
{ 
    using System.Configuration; 

    public class ProcessCollection : ConfigurationElementCollection 
    { 
     public ProcessConfig this[int index] 
     { 
      get 
      { 
       return (ProcessConfig)BaseGet(index); 
      } 

      set 
      { 
       BaseAdd(index, value); 
      } 
     } 

     protected override object GetElementKey(ConfigurationElement element) 
     { 
      return ((ProcessConfig)element).Name; 
     } 

     protected override ConfigurationElement CreateNewElement() 
     { 
      return new ProcessConfig(); 
     } 
    } 
} 

namespace Configuration 
{ 
    using System.Configuration; 

    public class ProcessConfig : ConfigurationElement 
    { 
     [ConfigurationProperty("name", IsRequired = true, IsKey = true)] 
     public string Name 
     { 
      get 
      { 
       return (string)this["name"]; 
      } 
      set 
      { 
       this["name"] = value; 
      } 
     } 
    } 
} 

Tuy nhiên khi tôi nhấn dòng mã này:

var processConfigurationSection = ConfigurationManager.GetSection("ProcessConfiguration") as ProcessesConfigurationSection; 

tôi nhận được lỗi trong đó nêu:

xảy ra lỗi khi tạo phần xử lý cấu hình cho ProcessConfiguration: Không thể tải loại 'Configuration.ProcessConfigurationSection' từ lắp ráp 'Cấu hình'.

Tôi hoàn toàn bối rối, nếu có ai có thể giúp tôi, tôi thực sự đánh giá cao điều đó.

+0

Bạn sẽ muốn gỡ lỗi điều này bằng cách sử dụng [Trình xem nhật ký kết hợp.] (Http://msdn.microsoft.com/en-us/library/e74a18c4.aspx) Chỉ cần đảm bảo chạy nó dưới dạng quản trị viên, bật nhật ký và khởi động lại trước khi cố gỡ lỗi. Bạn sẽ thấy nơi CLR đang tìm kiếm hội đồng, và phiên bản nào, và từ đó xác định lý do tại sao nó không được tìm thấy, nếu đó là vấn đề. – Will

+0

tên của DLL bạn đang xây dựng là gì? –

+0

Loại của bạn 'ProcessesConfigurationSection' có được định nghĩa trong assembly không? –

Trả lời

40

Trong dòng:

<section name="ProcessConfiguration" type="Configuration.ProcessConfigurationSection, Configuration" /> 

Tên 'Cấu hình' nên tham khảo các DLL mà bạn lại tòa nhà, hãy thử kiểm tra này và chính xác nếu cần thiết.

Ngoài ra tôi nghĩ rằng bạn có thể có một lỗi đánh máy, trong mã của bạn tên loại là:

ProcessesConfigurationSection 

(Lưu ý Processes vs Process)

+0

Cảm ơn, tên của tệp nhị phân đã biên dịch là Configuration.exe vì vậy tôi nghĩ điều đó có nghĩa là tôi có dòng đó đúng không? – RichardB

+1

Xem thêm, tôi cho rằng đây có thể là lỗi đánh máy –

+0

D'oh! Đó là nó, cảm ơn Justin :) – RichardB

3

Lỗi này đã được nâng lên vì cách gọi lắp ráp couldn' t tải loại lớp trong assembly đã chỉ định. Lỗi này có thể được gây ra bởi một không gian sau tên loại (trong đó đã xảy ra với tôi), ví dụ như phần cấu hình sau

type="Configuration.ProcessConfigurationSection , Configuration" 

sẽ tạo ra lỗi này quá.

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