2013-06-18 32 views
9

Tôi có ứng dụng Web.Api sử dụng các chức năng từ một hội đồng khác. Đối với hội đồng này tôi đã tạo ra một tập tin .config nơi tôi lưu trữ một số chuỗi.dll.config không được sao chép vào thư mục tệp asp.net tạm thời

Tôi đang sử dụng đoạn mã sau đó sẽ lấy một trong những chuỗi:

private static string LogUrl = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings.Settings["WebApi-LogUrl"].Value.ToString(); 

Assembly.GetExecutingAssembly().Location điểm đến file asp.net tạm thời, (C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Tệp ASP.NET tạm thời \ root \ dc2fa3d4 \ 834ee436 \ assembly \ dl3 \ cd068512) nhưng tệp dll.config của tôi không được sao chép ở đó. Kết quả là tôi không thể gỡ lỗi ứng dụng của tôi và nó cũng cung cấp cho null khi chạy mã trên một máy chủ IIS thực.

Nếu tôi đặt điểm dừng ngay trước khi nhận cài đặt, tôi có thể giữ thư mục tạm thời và khi tôi sao chép tệp dll.config của mình, tất cả đều hoạt động, nhưng tôi nên làm điều đó tự động như thế nào.

tôi có các thuộc tính cho tập tin dll.config tôi đặt là "Xây dựng hành động: Nội dung", "Sao chép vào thư mục đầu ra: luôn luôn"

Bất kỳ trợ giúp sẽ được đánh giá cao, có googled cho giờ bây giờ. ! :(

Trân trọng, Peter Larsson

Trả lời

17

tôi giải quyết điều này bằng cách sử dụng đoạn mã sau:

// The dllPath can't just use Assembly.GetExecutingAssembly().Location as ASP.NET doesn't copy the config to shadow copy path 
var dllPath = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath; 
var dllConfig = ConfigurationManager.OpenExeConfiguration(dllPath); 

// Get the appSettings section 
var appSettings = (AppSettingsSection) dllConfig.GetSection("appSettings"); 
return appSettings.Settings; 

Mấu chốt có:

new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath 

tôi đã đưa ra với điều đó giải pháp sau khi đọc câu trả lời của Zhaph - Ben Duguid tại đây: https://stackoverflow.com/a/2434339/103778.

Bây giờ tôi có thể nhận tệp cấu hình của tệp DLL nằm trong thư mục bin của ứng dụng web của tôi.

Tôi có từ written up a blog post thảo luận thêm về điều này.

+0

Aha, tôi phải kiểm tra điều này ... cảm ơn vì đề xuất! –

+0

Làm việc cho tôi. Cảm ơn vì tiền hỗ trợ! –

+0

Điều này đã giúp tôi rất nhiều. Tôi cũng nhận thấy rằng cuộc gọi đến GetName() là vô ích khi thuộc tính CodeBase cũng là một thuộc tính của lớp Assembly. – sluki

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