2009-08-03 22 views
5

Gần đây tôi đã chuyển lên Vista x64 và đột nhiên, khối ứng dụng machine.config appSettings của tôi không được đọc bởi bất kỳ hội đồng .NET nào.appSettings không được đọc từ machine.config trong Vista

Ngay sau configSections, và trước khi configProtectedData trong C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ Machine.config, tôi có:

<appSettings> 
    <add key="foo" value="blah"/> 
</appSettings> 
<system.runtime.remoting> 
    <customErrors mode="Off"/> 
</system.runtime.remoting> 

Đã phải lưu nó bằng cách chạy Notepad ++ với tư cách là quản trị viên, bởi vì nó bị khóa khác, có lẽ vì lý do chính đáng. Chạy đoạn mã sau vào SnippetCompiler hoặc VS .NET 2008:

foreach(var s in ConfigurationManager.AppSettings.AllKeys) 
    { 
     Console.WriteLine(s); 
    } 

    AppSettingsReader asr = new AppSettingsReader(); 

    Console.WriteLine(asr.GetValue("foo", typeof(string))); 

viết ra không có phím và thất bại với ngoại lệ sau:

--- 
The following error occurred while executing the snippet: 
System.InvalidOperationException: The key 'foo' does not exist in the appSettings configuration section. 
    at System.Configuration.AppSettingsReader.GetValue(String key, Type type) 
    at MyClass.RunSnippet() 
    at MyClass.Main() 
--- 

Ứng dụng tôi viết sử dụng Machine.config như một dự phòng cho việc tìm kiếm người dùng nên chạy môi trường nào nếu không thể tìm thấy trong app.config, vì vậy tôi muốn tránh phải viết lại ứng dụng của mình để tìm ra thứ gì đó sẽ hoạt động giống như trong năm 2000 và XP.

Trả lời

7

Giải quyết nó với các dòng mã sau đây:

ConfigurationManager.OpenMachineConfiguration().FilePath 

mà trả về:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Config\machine.config 

thay vì:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config 

Quên Tôi đang sử dụng 64 bit bây giờ. Thêm phần appSettings vào tệp cấu hình thích hợp đã giải quyết được sự cố.

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