2013-04-25 33 views
7

Tôi không thể tải tệp App.Config để tải vào Miền ứng dụng.Đang tải app.config vào AppDomain

Tôi đang sử dụng

[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $config_path) 

từ Powershell Calling .NET Assembly that uses App.config nhưng các tập tin App.Config vẫn chưa được nạp.

Tôi cũng đã thử đặt lại bộ nhớ cache như được giải thích trong Using CurrentDomain.SetData("APP_CONFIG_FILE") doesn't work in PowerShell ISE.

Đây là kịch bản thử nghiệm của tôi:

$configFile = "{ActualPhysicalPath}\App.Config" 
gc $configFile 

Add-Type -AssemblyName System.Configuration 
[Configuration.ConfigurationManager].GetField("s_initState", "NonPublic, Static").SetValue($null, 0) 
[Configuration.ConfigurationManager].GetField("s_configSystem", "NonPublic, Static").SetValue($null, $null) 
([Configuration.ConfigurationManager].Assembly.GetTypes() | where {$_.FullName -eq "System.Configuration.ClientConfigPaths"})[0].GetField("s_current", "NonPublic, Static").SetValue($null, $null) 

[Configuration.ConfigurationManager]::ConnectionStrings[0].Name 
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $null) 
[Configuration.ConfigurationManager]::ConnectionStrings[0].Name 
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $configFile) 
[Configuration.ConfigurationManager]::ConnectionStrings[0].Name 

Tôi luôn nhận được những chuỗi kết nối lưu trữ trong Machine.config, chứ không phải là những người trong App.config.

Làm cách nào để tải tệp App.Config cụ thể của tôi được tải trong miền ứng dụng?

+0

Bạn đã thử sử dụng phương pháp ConfigurationManager.OpenExeConfiguration? –

+0

Tôi chỉ thử nó và nó vẫn không hoạt động –

+0

Tôi hiểu lầm câu hỏi. Lấy làm tiếc. Bạn không thể đổi tên tệp cấu hình thành YOUR_APPLICATION_NAME.exe.config và sao chép tệp đó vào thư mục ứng dụng? Điều này sẽ làm việc. Ứng dụng sẽ tải tệp đó. –

Trả lời

9

Hãy thử di chuyển câu lệnh SetData của bạn trước câu lệnh GetField.

Với PowerShell 5.0 trên Windows 10, hướng dẫn được cung cấp bởi the link you reference dường như làm việc: Tôi có thể lấy cả AppSettingsconnectionStrings.

Add-Type -AssemblyName System.Configuration 

# Set this to the full path of your App.config 
$configPath = "C:\Full\Path\To\App.config" 

[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $configPath) 
[Configuration.ConfigurationManager].GetField("s_initState", "NonPublic, Static").SetValue($null, 0) 
[Configuration.ConfigurationManager].GetField("s_configSystem", "NonPublic, Static").SetValue($null, $null) 
([Configuration.ConfigurationManager].Assembly.GetTypes() | where {$_.FullName -eq "System.Configuration.ClientConfigPaths"})[0].GetField("s_current", "NonPublic, Static").SetValue($null, $null) 

[System.Configuration.ConfigurationManager]::AppSettings 
[System.Configuration.ConfigurationManager]::ConnectionStrings 
+0

Tôi không có một không gian làm việc để kiểm tra điều này, nhưng nếu ai đó có thể xác nhận rằng công trình này tôi sẽ cung cấp cho bạn câu trả lời. Cảm ơn bạn đã dành thời gian cho câu hỏi thực sự cũ đó –

-1

Bạn đã thử các giải pháp trình bày ở đây: Change default app.config at runtime

Nó xuất hiện để mô tả một số loại bộ nhớ cache, và rằng công việc hơn phải được thực hiện để đảm bảo dữ liệu được nạp được đọc. Một phần quan trọng của câu trả lời đầu tiên là: "Có tồn tại một lớp ClientConfigPaths lưu trữ các đường dẫn. Vì vậy, ngay cả sau khi thay đổi đường dẫn với SetData, nó không được đọc lại, bởi vì đã tồn tại các giá trị được lưu trữ. cũng là để xóa những mục này, "

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