2014-11-27 28 views
10

Tôi đã cố triển khai dự án asp.net mvc mới cho Azure để sản xuất. Mọi thứ hoạt động cục bộ nhưng tôi gặp rắc rối với các assembly khi triển khai.Lỗi lắp ráp Microsoft.Web.Administration trên azure

Khi điều hướng đến hầu hết các trang, tôi bắt đầu nhận lỗi của:

Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 

Sử dụng thông tin từ: https://stackoverflow.com/a/8824250/1411764 tôi bắt được ngoại lệ:

Could not load file or assembly 'Microsoft.Web.Administration, 
Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or 
one of its dependencies. The system cannot find the file specified. 

Microsoft.Web.Administration dường như là một lắp ráp IIS.

Sau đó, tôi đã thêm Microsoft.Web.Administration vào dự án sử dụng Nuget.

Bây giờ tôi đang mắc kẹt với một lỗi mới:

Could not load file or assembly 'Microsoft.Web.Administration' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 

Tôi đã thử thêm một ràng buộc chuyển hướng vào web.config

<dependentAssembly> 
    <assemblyIdentity name="Microsoft.Web.Administration" publicKeyToken="31BF3856AD364E35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-7.9.0.0" newVersion="7.9.0.0" /> 

Tại thời điểm này nó phá vỡ ngay lập tức và tôi không thể tải bất kỳ trang nào. (Có vẻ tồi tệ hơn khi tôi không có thêm dll.

Tôi đã đọc nhiều bài đăng tương tự nhưng dường như không thể hiểu được. Hy vọng tôi đang làm điều gì đó đơn giản sai do thiếu hiểu biết về Azure . Bất kỳ trợ giúp sẽ được nhiều đánh giá cao

Cập nhật Thông tin

tính cách nhấn phải để tham khảo Microsoft.Web.Administration:.

Sao chép địa phương: Đúng

Runtime Version v2.0.50727

Version: 7.0.0.0

Calling lắp ráp: Microsoft.WebMatrix.Core, Version = 8.1.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35

Cập nhật 2 - từ nhận xét:

Sau khi cài đặt ràng buộc với 7.0.0.0, bây giờ nó biên dịch lại trên máy chủ và có thể hiển thị một số trang nhưng tôi vẫn đang gặp lỗi trước đó.

Could not load file or assembly 'Microsoft.Web.Administration, Version=7.9.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. 
The located assembly's manifest definition does not match the assembly reference. 
(Exception from HRESULT: 0x80131040) 

tôi giả từ này phiên bản đó NuGet đã chỉ cung cấp 7.0.0.0 tuy nhiên một cái gì đó nghĩ rằng nó cần 7.9.0.0.

Cập nhật 3: Thành công

tôi bắt đầu nhìn vào sự khác biệt số phiên bản và thấy stack question này mà giải thích một số khác biệt giữa IIS và IISExpress.

Hiện tại, tôi đã thay đổi chuyển hướng từ 7.9.0.0 thành 7.0.0.0 có vẻ như đã giải quyết được vấn đề.

<bindingRedirect oldVersion="0.0.0.0-7.9.0.0" newVersion="7.0.0.0" /> 

Cụm công việc hiện đang hoạt động và tất cả các trang đang tải.

Giải pháp này rất khó hiểu. Có ràng buộc với một phiên bản thấp hơn thực hành xấu hoặc có khả năng gây ra các vấn đề trong tương lai không? Tôi lo lắng rằng tôi nên giải quyết mã gọi các phiên bản IIS khác nhau.

+0

Đây có phải là Vai trò web hoặc Trang web không? – haim770

+0

Bạn có thể kiểm tra FileInfo cho Microsoft.Web.Administration.dll và thêm Phiên bản AssemblyInfo và Tệp của dll, tôi nghi ngờ chúng có thể không khớp với 100%. –

+0

Hãy thử bật Nhật ký kết nối để biết thêm thông tin về các vấn đề ràng buộc chính xác http://stackoverflow.com/questions/4679279/debug-net-assembly-binding-aka-find-what-dll-is-used-and-why –

Trả lời

0

Đây có thể không phải là giải pháp tối ưu, nhưng đó là tóm tắt các đề xuất từ ​​nhận xét, câu hỏi gốc và nghiên cứu và thử nghiệm tôi đã làm, cũng như cách diễn giải kết quả của tôi. Tôi hy vọng nó sẽ hữu ích. Cảm ơn tất cả những người đã góp phần giải quyết vấn đề này.

TL; DR: Cài đặt các tính năng quản lý IIS và IIS trên hệ thống BUILD của bạn hoặc xây dựng trên hệ thống nơi chúng được cài đặt.

Lỗi này có nghĩa là ứng dụng của bạn đang cố tải phiên bản IIS Express Microsoft.Web.Administration, có lẽ không phải là thứ bạn muốn trên máy chủ sản xuất.

  • Version 7.0.0.0 là dành cho IIS
  • Version 7.9.0.0 là dành cho IIS nhanh

(xem thêm https://stackoverflow.com/a/11216326/2279059)

Để thực hiện việc ứng dụng của bạn trên một hệ thống sản xuất với IIS thực sự, bạn phải xây dựng nó trên một hệ thống mà IIS (không chỉ IIS Express) phiên bản của Microsoft.Web.Administration được cài đặt, nghĩa là, bạn phải cài đặt IIS và kích hoạt tính năng quản lý IIS (s) (có tên hơi khác nhau trên Windo khác nhau Phiên bản/ấn bản ws), do đó, C:\Windows\system32\inetsrv\Microsoft.Web.Administration.DLL tồn tại.

Trong tập tin dự án của bạn, tham chiếu đến DLL sẽ trông như thế này:

<Reference Include="Microsoft.Web.Administration, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath> 
    <SpecificVersion>True</SpecificVersion> 
</Reference> 

(! Đây là cho Visual Studio 2012 và có thể khác nhau cho các phiên bản mới hơn)

Lưu ý rằng nếu bạn tắt SpecificVersion hoặc đặt Version thành 7.9.0.0, ứng dụng của bạn sẽ vẫn hoạt động, miễn là bạn xây dựng nó trên một hệ thống mà IIS và Microsoft.Web.Administration được cài đặt. Tuy nhiên, nếu bạn xây dựng nó trên một hệ thống mà DLL bị thiếu, sau đó ứng dụng của bạn có thể được liên kết với phiên bản IIS Express của DLL (mà tàu với Visual Studio), gây ra vấn đề được mô tả trong câu hỏi. Do đó, bạn nên chỉ định phiên bản tốt hơn. Điều này sẽ làm cho việc xây dựng thất bại nếu DLL không được cài đặt trên hệ thống xây dựng, đó là dễ dàng hơn để gỡ lỗi hơn là một "thành công" xây dựng mà sản xuất một thực thi bị hỏng.

Ngoài ra còn có gói NuGet có tên là Microsoft.Web.Administration trên web. Theo thông tin cũ hơn (https://blog.lextudio.com/2015/05/whats-microsoft-web-administration-and-the-horrible-facts-you-should-know/), đây không phải là gói Microsoft và không nên sử dụng. Tuy nhiên, có vẻ như bây giờ Microsoft đã sở hữu gói. Trong khi tôi không thể tìm thấy nó trên NuGet trong Visual Studio 2012, một ứng dụng tôi đã viết trong Visual Studio 2015 sử dụng gói này và hoạt động tốt trên nhiều phiên bản của Windows (như Windows Server 2012 và Windows 10, trong đó có các phiên bản khác nhau của IIS). Do đó, việc sử dụng gói NuGet có thể giải quyết tất cả các vấn đề này.

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