2009-08-14 44 views
5

Tôi đã có một file app.config, trong đó có những điều sauNET ConfigurationManager app.config nhầm lẫn

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name ="PowershellSnapIns" type ="System.Configuration.DictionarySectionHandler,System"/> 
    </configSections> 

    <PowershellSnapIns> 
     <add key="SnapIn1" value="WebAdministration" /> 
     <add key="SnapIn2" value="Jimmy Hendrix" /> 
     <add key="SnapIn3" value="..." /> 
    </PowershellSnapIns> 
</configuration> 

tôi sẽ sử dụng lớp ConfigurationSettings để đọc nó, nhưng điều đó đã bị phản đối. Đó là khá đơn giản để sử dụng. Bây giờ tôi phải sử dụng lớp ConfigurationManager, và bây giờ tôi có mã này để đọc nó.

System.Configuration.Configuration config = 
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

IDictionary SnapInList = (IDictionary) config.GetSection("PowershellSnapIns"); 

Nhưng nó vẫn bị lỗi. Tôi đã thay đổi thuộc tính app.config để sao chép sang bản dựng, nhưng nó tiếp tục chấp nhận rằng nó không thể tìm thấy tệp. Ngoại lệ cho biết nó đang tìm kiếm TestConsole.vshost.exe.config. Hiện vs2k8sp1 bây giờ đổi tên app.config cho bạn tự động, và nếu như vậy, tôi đang làm gì sai? Chắc chắn tôi không cần phải đổi tên file app.config để debug vhost. Tôi biết trong bản phát hành rằng nó có thể được đổi tên thành TestConsole.exe.config. Vì vậy, những gì đang xảy ra? Đó là trường hợp của mã sai hoặc những gì?

+2

.NET không "lỗi". Nó ném ngoại lệ. Khi một ngoại lệ bị vô hiệu hóa và khiến chương trình của bạn "không hoạt động", bạn nên đăng hoàn toàn ngoại lệ trong câu hỏi của mình. Nắm bắt ngoại lệ, sau đó đăng kết quả của 'ex.ToString()'. –

+0

sẽ thực hiện. Tôi đã thử đổi tên tệp thành TestConsole.vhost.exe.config nhưng nó đã trở lại trống. –

+0

Xin chào John, Đây là ngoại lệ. Đã xảy ra lỗi khi tạo phần xử lý cấu hình cho PowershellSnapI ns: Không thể tải tệp hoặc lắp ráp 'Hệ thống' hoặc một trong các phụ thuộc của nó. Các sys tem không thể tìm thấy tệp được chỉ định. (C: \ Users \ Administrator \ Documents \ Visual Stu dio 2008 \ Projects \ TestConsole \ TestConsole \ bin \ Debug \ TestConsole.vshost.exe.confi g dòng 4) –

Trả lời

12

Đây là cách tôi đã làm nó:

-Hãy chắc chắn rằng SystemSystem.Configuration.dll có sẵn trong thư mục bin của bạn. Bạn làm điều này bằng cách thêm tham chiếu vào cả hai dll và đặt thuộc tính copy local thành true.

-Đảm bảo trong tệp App.Config của bạn, đặt thuộc tính copy local thành false.

-Sử dụng các phương pháp sau đây:

public static string XMLCheck 
{ 
    get 
    { 
     var section =(Hashtable)ConfigurationManager.GetSection("PowershellSnapIns"); 
     return (string)section["SnapIn1"]; 

    } 
} 

-Các XMLCheck nên trở về "WebAdministration"

+0

Chìa khóa không quan trọng, vì tôi không cần biết khóa, chỉ là giá trị, đó là tên snapin của PowerShell. –

+0

Đã cập nhật câu trả lời. – Graviton

+0

Hi Ngu Soon Hui, Nó hoạt động. Cảm ơn. Tôi có thể thấy bây giờ (hindsight là đẹp) mà lớp ConfigurationManager là tĩnh. Cảm ơn. –

1

VS đổi tên App.config để yourappname.exe và đặt nó trong thư mục bin cùng với bạn. exe

Bạn có thể xác nhận rằng tệp tồn tại trong thư mục bin cùng với tệp exe của bạn không.

+1

Tệp TestConsole.vhost.exe.config nằm trong thư mục Visual Studio 2008 \ Projects \ TestConsole \ TestConsole \ bin \ Debug. –