2015-08-19 28 views
5

Tôi có ứng dụng Web ASP.NET 4.0 cũ được sản xuất trong một thời gian. Tôi hiện đang thêm chức năng bổ sung dưới dạng một dịch vụ WebAPI REST vào nó.Hành vi khác nhau khi "bên ngoài" một số cài đặt cấu hình nhất định vào các tệp bên ngoài

Thêm các gói WebAPI NuGet cũng nói thêm một mục vào web.config của tôi cấu hình phiên bản gói runtime NewtonSoft.Json:

Bây giờ, kể từ khi tôi có cấu hình của tôi "compartementalized" , Tôi muốn đặt tệp này vào một tệp riêng biệt runtime.config và tham chiếu nó từ chính web.config:

Khi tôi làm điều này, đột nhiên đăng ký của tôi về các tuyến đường WebAPI trong global.asax.cs

protected void Application_Start(object sender, EventArgs e) 
{ 
    ... 

    // Route #1 
    GlobalConfiguration.Configuration.Routes.MapHttpRoute("Route1", "test/{list}/{check}", new { Controller = "Devices" }); 
    ... 
}   

không thành công với một ngoại lệ:

System.IO.FileLoadException là unhandled bởi người dùng mã
nhắn = các tập tin hoặc lắp ráp "Newtonsoft.Json, Phiên bản = 4.5.0.0, Văn hóa = trung lập, PublicKeyToken = 30ad4fe6b2a6aeed" hoặc một phụ thuộc không thể được tìm thấy. Source = System.Net.Http.Formatting
FileName = Newtonsoft.Json, Version = 4.5.0.0, Culture = trung tính, PublicKeyToken = 30ad4fe6b2a6aeed

Đối với tôi, nó có vẻ như thể ra ngoài runtime.config không đang được đọc cùng lúc với nội dung của số web.config ...... điều này khá đáng ngạc nhiên đối với tôi, tôi có thể mong đợi rằng toàn bộ web.config bao gồm bất kỳ tệp cấu hình phụ "được externalized" nào sẽ được đọc trước bất kỳ mã nào trong global.asax.cs đang được thực hiện ...

Mọi thông tin chi tiết? Tôi thậm chí không biết tìm kiếm thông tin chi tiết ở đâu trên MSDN ....

+1

Có vẻ như bạn không phải là người đầu tiên - http://world.episerver.com/Blogs/Magnus-Rahl/Dates/2011/6/Todays-gotcha-configSource-on-the-runtime-section-element/ và https://social.msdn.microsoft.com/Forums/vstudio/en-US/7552df69-d3a0-49e4-b45f-0fa4972fa64c/assembly-version-redirect-doesnt-work-with-a-configsource-in-runtime? diễn đàn = clr. Không chắc chắn nếu/nơi nó được bảo hiểm trên MSDN như vậy. –

+0

@AlexeiLevenkov: nếu bạn thêm câu trả lời này làm câu trả lời, tôi sẽ vui vẻ chấp nhận nó :-) –

Trả lời

1

web.config chứa thông tin cấu hình cho nhiều phần khác nhau của ngăn xếp web Windows.

Một số thông báo cho IIS biết phải làm gì, một số thông báo cho .NET biết phải làm gì, một số thông báo cho ứng dụng của bạn biết phải làm gì. Như vậy, các phần tử khác nhau hoạt động rất khác nhau tùy thuộc vào phần nào của ngăn xếp mà chúng nhắm mục tiêu.

<runtime> là mức khá thấp, xem this from MSDN: "thiết lập Runtime xác định như thế nào thời gian chạy ngôn ngữ chung xử lý thu gom rác thải và các phiên bản của một hội đồng để sử dụng trong file cấu hình"

configSource="whatever" là thực sự phân tích bằng NET chính nó, see this from MSDN:

Trong ASP.Các ứng dụng NET, vào thời gian chạy, bạn có thể gán cho thuộc tính cấu hình tên của một tệp cấu hình thay thế.

Về cơ bản, .NET chạy với cài đặt <runtime> được chỉ định trước khi nó phân tích cú pháp configSource.

Nếu bạn chơi xung quanh với tệp web.config trong Visual Studio, bạn sẽ thấy rằng intellisense sẽ cho bạn biết thuộc tính nào có thể đi đến đâu.

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