2011-01-20 43 views
22

Tôi vừa cố gắng triển khai một ứng dụng MVC3 với môi trường lưu trữ IIS7 của chúng tôi nhưng tôi được trình bày wtih các ngoại lệ sau đây:MVC3 triển khai phụ thuộc vấn đề

Không thể tải loại 'Microsoft.Web.Infrastructure. DynamicModuleHelper.DynamicModuleUtility ' từ assembly ' Microsoft.Web.Infrastructure, Phiên bản = 1.0.0.0, Văn bản = trung lập, PublicKeyToken = 31bf3856ad364e35 '. Mô tả: Một ngoại lệ không được xử lý xảy ra trong khi thực hiện yêu cầu web hiện tại là . 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à vị trí bắt nguồn từ mã số .

Ngoại lệ chi tiết: System.TypeLoadException: Không thể loại tải 'Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility' từ lắp ráp 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = trung tính , PublicKeyToken = 31bf3856ad364e35 '.

Mọi đề xuất?

Ứng dụng không phải là thùng được triển khai vì tôi đã cài đặt các trang Web ASP.Net và MVC3 trên chính máy chủ web.

+2

Xem http://stackoverflow.com/questions/4723646/asp-net-mvc-3-which-dlls-need-to-be-deployed/4723778#4723778 – Omar

+0

Chỉ cần rõ ràng, tôi không bin triển khai ứng dụng này - Tôi đã cài đặt MVC3 trên máy chủ. –

+0

Có những cách nào khác để triển khai ứng dụng? –

Trả lời

45

Điều này là do Microsoft.Web.Infrastructure không có trong GAC của bạn. Bạn cần thêm tham chiếu này vào dự án của mình. Nhấp chuột phải vào tham chiếu và đi đến các thuộc tính sau đó đặt sao chép thành địa phương thành true.

Copy Local

Output (Bỏ qua các Ninject và NCU):

alt text

+0

Tôi đã kiểm tra C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.Web.Infrastructure \ v4.0_1.0.0.0__31bf3856ad364e35 và DLL chắc chắn là có. Tôi không có sự phụ thuộc này trong dự án của tôi khi nó đứng. –

+0

Bạn cũng có thể phải tham khảo một loạt các công cụ khác. Stuff như Razor, System.Webpages, vv Nó sẽ không nằm trong dự án của bạn, nhưng bạn có thể tham khảo nó bằng cách thêm từ các assembly của framework. –

+0

Nếu không được bao gồm trong System.Web.MVC DLL? –

1

Hãy chắc chắn rằng file web.config gốc trên máy chủ của bạn (nằm ở đâu đó như ở đây: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config) có sau mục nhập:

<configuration> 
    <location allowOverride="true"> 
    <system.web> 
     <fullTrustAssemblies> 
     <add 
      assemblyName="Microsoft.Web.Infrastructure" 
      version="1.0.0.0" 
      publicKey="[bunch of letters and numbers]" 
     /> 

Nếu thiếu thì có nghĩa là ai đó đã làm hỏng .NET của bạn. cài đặt.

+3

Điều đó 'publicKey' trông đáng sợ – Omar

+0

Tôi đã đơn giản hóa nó :) Điểm là, MVC 3 và WebPages yêu cầu mục nhập đó ở đó để Microsoft.Web.Infrastructure hoạt động. – marcind

+0

Đúng. Tìm thấy nó và có vẻ tốt. –

4

Microsoft.Web.Infrastructure bây giờ là một gói NuGet, và nó có thể được thêm vào dự án của bạn để cho phép triển khai thư mục bin -

http://nuget.org/packages/Microsoft.Web.Infrastructure

+2

Tôi có gói cài đặt trong dự án của tôi, nhưng dự án không tham chiếu đến DLL. Tôi đoán rằng một ứng dụng quá mức của ReSharper "loại bỏ tham chiếu không sử dụng" có thể đã bị xóa nhiều hơn ... – Zarepheth

6

Hóa ra sau khi làm một sạch tham khảo, nó loại bỏ Microsoft.Web.Infrastructure, nhưng không từ tệp packages.config. Sau khi thử thêm lại nó bằng cách sử dụng Package Manager Console, Visual Studio nói rằng nó đã được cài đặt là sai vì nó đã bị xóa.

sau đó tôi loại bỏ các dòng mã trong tập tin packages.config

<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" /> 

và chạy lệnh một lần nữa

PM> Install-Package Microsoft.Web.Infrastructure 

Sau đó, bây giờ nó hoạt động tốt.

+3

Ngay cả khi gói được cài đặt, bạn có thể buộc cài đặt lại thay vì thực hiện những gì bạn đã thực hiện bằng lệnh: Cập nhật gói Microsoft.Web.Infrastructure -Reinstall –

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