Không thể tải tệp hoặc lắp ráp System.Web.Http.Webhost sau khi xuất bản lên trang web Azure


141

Tôi đã tạo một dự án web và nó chạy tốt trong Visual studio. Tuy nhiên, tôi đã gặp lỗi sau khi xuất bản nó lên azurewebsites. Điều gì có thể gây ra vấn đề?

Không thể tải tệp hoặc tập hợp 'System.Web.Http.Webhost, Phiên bản = 5.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp. (Ngoại lệ từ HRESULT: 0x80131040)

Mô tả: Một ngoại lệ chưa được xử lý đã xảy ra trong quá trình thực hiện yêu cầu web hiện tại. Vui lòng xem lại dấu vết ngăn xếp để biết thêm thông tin về lỗi và nơi xuất phát trong mã.

Chi tiết ngoại lệ: System.IO.FileLoadException: Không thể tải tệp hoặc lắp ráp 'System.Web.Http.Webhost, Version = 5.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp. (Ngoại lệ từ HRESULT: 0x80131040)

Lỗi nguồn:

Một ngoại lệ chưa được xử lý đã được tạo trong quá trình thực hiện yêu cầu web hiện tại. Thông tin liên quan đến nguồn gốc và vị trí của ngoại lệ có thể được xác định bằng cách sử dụng dấu vết ngăn xếp ngoại lệ bên dưới.

Dấu vết tải hội: Các thông tin sau có thể hữu ích để xác định lý do tại sao không thể tải 'System.Web.Http.Webhost, Version = 5.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35'.

WRN: Ghi nhật ký ràng buộc hội được TẮT. Để bật ghi nhật ký liên kết lắp ráp, đặt giá trị đăng ký [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) thành 1. Lưu ý: Có một số hình phạt hiệu suất liên quan đến ghi nhật ký lỗi liên kết lắp ráp. Để tắt tính năng này, hãy xóa giá trị đăng ký [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

Sau đây là một phần của tệp web.config.

  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers></system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Câu trả lời:


129

Cái dllcòn thiếu trong môi trường được công bố (đã triển khai). Đó là lý do tại sao nó hoạt động trong địa phương tức là Visual Studio nhưng không phải trong Môi trường trang web Azure.

Chỉ cần thực hiện Copy Local = truetrong các thuộc tính cho hội đồng ( System.Web.Http.Webhost ) và sau đó thực hiện triển khai lại, nó sẽ hoạt động tốt.

Nếu bạn gặp lỗi tương tự, nghĩa là thiếu một số lắp ráp khác, sau đó thực hiện lắp ráp đó thành copylocal = true và triển khai lại, lặp lại điều này lặp đi lặp lại - nếu bạn không chắc chắn về sự phụ thuộc của nó.


2
Điều Copy Localnày đã đúng. Kỳ lạ thay, nó cho thấy Runtime Versionlà v4.0.30319 thay vì v5?
ca9163d9

4
Bạn có biết những gì đã xảy ra ở đây? Tôi đã chạy tốt trong 18 tháng khi nó nhảy lên và cắn tôi.
Glenn Gordon

2
Điều này đã khắc phục sự cố cho tôi Cảm ơn! Nhưng có vẻ lạ đối với tôi rằng chúng tôi phải đưa các thư viện khung vào các dự án của mình (Trong trường hợp của tôi không phải Azure mà là máy chủ IIS). Có ai biết nếu đó là trường hợp chạy một số cập nhật để chúng tôi không phải đưa chúng vào nữa không?
edgarpetrauskas

1
Tiện ích bổ sung vì tôi phải mất nhiều thời gian để tìm bản sao cục bộ: Trong VS2013, bạn mở nút "tham chiếu" trong dự án và nhấp chuột phải vào các thuộc tính trên thư viện mà bạn muốn đặt "sao chép cục bộ".
ArtHare

6
Nếu Copy Local đã được đặt thành true và bạn không thể cập nhật WebApi vì phụ thuộc, có một mẹo để đặt Copy Local thành false, xây dựng, sau đó đặt Copy Local trở lại true và build. Tôi không biết tại sao điều này hoạt động.
DeeArgee

90

Nếu bạn vẫn đang tìm kiếm một câu trả lời, hãy thử kiểm tra chuỗi câu hỏi này . Nó giúp tôi giải quyết một vấn đề tương tự.

chỉnh sửa: Giải pháp giúp tôi là chạy Update-Package Microsoft.AspNet.WebApi -reinstalltừ trình quản lý gói NugGet, theo đề xuất của Pathoschild. Sau đó tôi đã phải xóa tập tin .suo của mình và khởi động lại VS, theo đề xuất của Serge Osypchuk trong chuỗi này .


Vui lòng tránh liên kết chỉ trả lời .. thay vào đó xin vui lòng gửi thông tin có liên quan từ liên kết ở trên tại đây ..
Anvesh Yalamarthy

3
Chạy lệnh Cập nhật-Gói đã giải quyết vấn đề, trong khi không có đề xuất nào khác hoạt động. Cảm ơn bạn đã trả lời!
Đa phương tiện DigiOz 24/2/2015

Giải pháp tốt nhất cho vấn đề.
Festim Cahani

Câu trả lời hoàn hảo, Cảm ơn!
Apolo

3
Giải pháp này cũng làm việc cho tôi. Tôi khá chắc chắn rằng điều này đã được gây ra bởi chức năng 'Loại bỏ các hội đồng không sử dụng' của ReSharper. Loại bỏ các hội đồng không sử dụng đôi khi xóa mù các hội đồng mà không kiểm tra nội dung gói NuGet.
Joe King

54

Tôi đã gặp vấn đề tương tự và tôi đã giải quyết nó bằng cách đặt CopyLocalthành đúng cho các lib sau:

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

Tôi phải thêm rằng tôi sử dụng MVC4 và NET 4


cảm ơn bạn điều này rất hữu ích Bạn có biết tại sao những tập tin này sẽ không có trong GAC không? Có phải vì các trang web khác nhau có thể sử dụng các khung dotnet khác nhau, v.v.?
dellyjm

Như tôi nhớ vấn đề này đã xảy ra kể từ khi Microsoft áp dụng các bản sửa lỗi quan trọng trong khu vực đó (tôi đoán trong System.Web / ASP NET / MVC). Tôi đoán các không gian tên này không nằm trong GAC (vì vậy không phải trong các cụm NET gốc) mà là trong các đường dẫn Visual Studio hoặc MVC riêng biệt.
Bronek

Điều này đã giải quyết vấn đề trên VPS của tôi (đây không chỉ là vấn đề khó khăn)
Evilripper

Điều này làm việc cho tôi (mặc dù tôi không sử dụng Azure). Tôi đã chuyển một dự án từ môi trường khung .net 4.5 xuống 4.0 và nhận được vấn đề này ở cuối mọi thứ.
TheQ

1
Theo đề xuất của DeeArgee ở trên, tôi đã có LOCAL COPY = true cho cả 3 dll này. Nhưng đề xuất này cuối cùng đã giải quyết được vấn đề: "Nếu Copy Local đã được đặt thành true, có một mẹo để đặt Copy Local thành false, xây dựng, sau đó đặt Copy Local trở lại true và xây dựng. Tôi không biết tại sao điều này hoạt động. - DeeArgee 19/11/2015 lúc 17:16
Debbie A

34

Đối với tôi đã làm việc thêm phần sau vào web.configtập tin:

<configuration>
...
    <runtime>
    ...
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>
    ...
    </runtime>
...
</configuration>

Ví dụ này là viết tắt của MVC 5.1. Hy vọng nó sẽ giúp ai đó giải quyết vấn đề như vậy.


2
bạn thật tuyệt vời. làm việc như một cơ duyên trong mvc5. Cảm ơn
David Graça

2
Cảm ơn bạn, đã làm việc cho tôi quá +1, người hỏi câu hỏi này nên đánh dấu đây là câu trả lời!
Ray

Hoặc chỉ cần thêm Microsoft.AspNet.WebApi.WebHostgói thông qua nuget.
Optimax

15

Đối với tôi, nó bắt đầu hoạt động sau khi chọn "Xóa tệp bổ sung tại đích" trong tùy chọn xuất bản tệp trong cài đặt trên hộp thoại xuất bản.


Đã làm cho tôi! Đẹp một.
Bác sĩ Schizo

Đây là giải pháp duy nhất ở đây làm việc cho tôi. Tôi đoán có một phiên bản cũ khác của một dll ở đó đã vấp ngã mọi thứ. Cảm ơn!
Ohad Schneider

10

Các dll bị thiếu trong môi trường được công bố (triển khai). Đó là lý do tại sao nó hoạt động trong địa phương tức là Visual Studio nhưng không phải trong Môi trường trang web Azure.

Chỉ cần sao chép Local = true trong các thuộc tính cho cụm (System.Web.Http.Webhost) và sau đó thực hiện triển khai lại, nó sẽ hoạt động tốt.


tương tự ở đây, đây chính xác là những gì cần thiết.
pabloelustondo

1
Có lẽ bởi vì cùng một giải pháp được mô tả trong một số câu trả lời khác một năm trước đó.
Chad

6

Tôi đang sử dụng vs2012 và tôi nghĩ rằng bản cập nhật KB2781514 đã thay đổi một số cài đặt. Tất cả System.Web.Http trong dự án MVC4 của tôi đã thay đổi thành false và tôi vẫn nhận được thông báo này. Tôi đã thay đổi All file in this projecttài sản xuất bản nhưng nó không hoạt động. Cuối cùng tôi phải thay đổi Copy Local = truetừng cái một và giải quyết vấn đề này.


2

Tôi đã gặp lỗi tương tự và tôi đã thay đổi phiên bản của mình từ 4 thành 3 và nó đã được giải quyết:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- Ensure correct version of MVC -->
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
</assemblyBinding>

2

Tôi đã có cùng một vấn đề trong ứng dụng của tôi.

System.web.http.webhost not found.

Bạn chỉ cần sao chép system.web.http.webhosttệp từ dự án chính mà bạn chạy trong Visual Studio và dán nó vào binthư mục dự án đã xuất bản của bạn .

Sau đó, nó có thể hiển thị cùng một lỗi nhưng tên thư mục bị thay đổi system.web.http. Thực hiện theo các thủ tục như trên. Nó sẽ hoạt động sau khi tất cả các tập tin được tải lên. Điều này là do gói nuget trong Visual Studio mà họ tải xuống từ internet nhưng trên máy chủ thì không thể tải xuống được.

Bạn có thể tìm thấy tập tin này trong binthư mục dự án của bạn .


1

Điều này đã xảy ra với tôi trên VS2013 (Cập nhật 5) /ASP.NET 4.5, trong loại dự án "Ứng dụng web" bao gồm MVC và Web API 2. Lỗi xảy ra ngay sau khi tạo dự án và trước khi thêm bất kỳ mã nào. Thêm cấu hình sau sửa nó cho tôi. Sau khi giải quyết "System.Web.Helpers", hai lỗi tương tự xuất hiện cho "System.Web.Mvc" và "System.Web.WebPages".

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>

0

Tôi đã thiếu một số DLL. Ngay cả khi tôi tự sao chép chúng vào thư mục vào lần tiếp theo tôi xuất bản, chúng sẽ biến mất. Mỗi cái đã được đặt thành Sao chép cục bộ trong VS. Cách khắc phục đối với tôi là đặt từng cái thành Sao chép cục bộ sai, lưu, xây dựng rồi đặt từng cái để sao chép đúng cục bộ. Lần này khi tôi xuất bản tất cả các DLL được xuất bản chính xác. Lạ


0

Nếu bạn có nhiều dự án trong giải pháp của mình và một trong các dự án của bạn không thể xây dựng do lỗi này thì hãy đảm bảo bạn đã cài đặt gói nuget WebApi Core trong dự án đó. Chỉ cần thêm một tham chiếu đến System.Web.Http không giúp ích gì, bạn cần cài đặt gói nuget chính xác vào dự án đó.

Tôi đã có nhiều dự án trong giải pháp của mình và WebApi Core đã được cài đặt trong một dự án khác. Tôi đã tham chiếu cụm System.Web.Http bằng cách nhấp chuột phải và đánh dấu vào cụm từ danh sách và nó không hoạt động trên Azure, mặc dù tại địa phương nó sẽ xây dựng ổn. Tôi đã phải xóa tham chiếu thủ công và thêm gói nuget WebApi Core cho mỗi dự án cần tham chiếu lắp ráp.


0

Trong trường hợp nếu "Sao chép cục bộ" đã là True, đôi khi tôi thấy nó hoạt động nếu bạn xóa các tệp đã được xuất bản và xuất bản lại.

Ví dụ: nếu bạn đang sử dụng IIS, hãy xóa các trang web và nội dung của thư mục mà chúng được xuất bản và xuất bản lại.

Có thể có các phiên bản cũ hơn của tệp tại đích, vì vậy để đảm bảo bạn không sử dụng các phiên bản cũ hơn, hãy xóa mọi thứ trước khi xuất bản lại.


0

Tôi đã xóa mục sau khỏi web.config và nó hoạt động với tôi.

<dependentAssembly>
                <assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
            </dependentAssembly>

0

Hãy chắc chắn rằng phiên bản gói bằng nhau trên giải pháp. Tôi vừa hạ cấp & nâng cấp Microsoft.AspNet.Mvcgói trên toàn bộ giải pháp và vấn đề đã được giải quyết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.