Không thể tải tệp hoặc lắp ráp 'Microsoft.Web.Infra Structure,


79

Tôi đã cố gắng tải trang web của mình lên một máy chủ. Nó hoạt động tốt với máy chủ cục bộ của tôi, vì vậy tôi đã tải mọi thứ trong wwwrootthư mục localhost lên máy chủ và thay đổi chuỗi kết nối.

Nhưng có lỗi này:

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: The pre-application start initialization method Start on type RouteDebug.PreApplicationStart threw an exception with the following error message: Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified..
   at System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
   at RouteDebug.PreApplicationStart.Start()

Dự án đã nopcommerce.

Cần làm gì để giải quyết lỗi này?


sao chép có thể không hoạt động vì máy chủ lưu trữ không được cài đặt cùng các bộ phận phụ thuộc, hãy xem hướng dẫn này: iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio
Mike Trusov

Câu trả lời:


57

Bạn sẽ cần phải bao gồm dll với dự án của mình và thêm một tham chiếu đến nó.

Đây là liên kết đến một vấn đề tương tự đã có trên Stack: Vấn đề phụ thuộc vào triển khai MVC3


Cũng phải tải bộ mã hóa "_bin_deployableAssemblies" lên máy chủ ??
dùng1348351

Có một số cách khác nhau để xử lý điều này và nó cũng phụ thuộc vào cách bạn triển khai. Nhưng nếu bạn nhấp vào liên kết trong bài đăng của tôi và sau đó lướt qua blog trên câu trả lời trên cùng với dấu kiểm, bạn sẽ thấy rằng nếu bạn thiết lập nó một cách chính xác, các hình nền từ _bin_deployableAssemblies sẽ tự động được xử lý khi bạn thực hiện một triển khai (hoặc triển khai Web). Đây là liên kết đến blog tôi đã đề cập.
Colin Pear

5
Blog mà liên kết này đi qua dường như không còn nữa. Câu trả lời này - stackoverflow.com/a/12683392/137474 phù hợp với tôi.
Baldy

@ColinPear, Cảm ơn rất nhiều, Đúng như những gì tôi đang tìm kiếm. Tôi đã có một Ứng dụng web thương mại điện tử yêu cầu điều đó !.
PatsonLeaner

trong trường hợp của tôi, trang web của tôi hoạt động trong plesk mà không có "Microsoft.Web.Infraosystem.dll" nhưng khi chuyển sang cpanel, lỗi này đã hiển thị!
Omid-RH

39

Hóa ra sau khi thực hiện Làm sạch Tham chiếu, nó đã bị xóa Microsoft.Web.Infrastructure, nhưng không bị xóa khỏi tệp package.config. Sau khi cố gắng 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, điều này là sai vì nó đã bị gỡ bỏ.

Sau đó, tôi đã xóa dòng mã trong packages.configtệp

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

và chạy lại lệnh

PM> Install-Package Microsoft.Web.Infrastructure

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


32

Cài đặt AspNetMVC3ToolsUpdateSetup được tải xuống từ đây sẽ giải quyết vấn đề này mà không cần thêm tài liệu tham khảo


28

Bất chấp số lượng câu trả lời, tôi sẽ thêm một câu trả lời khác mà IMHO làm cho mọi thứ rõ ràng hơn một chút.

Như Robwrightmail đã đề cập Microsoft.Web.Infrastructurelà một gói NuGet (không cần liên kết, bạn có nó trong Trình quản lý gói NuGet).

Rõ ràng, nó đã được tham chiếu bởi dự án của bạn và đột nhiên biến mất. Một số lý do có thể tồn tại nhưng điều quan trọng là mặc dù bạn có thể đã bật Khôi phục gói tự động trong Visual Studio bằng cách:

  • Quản lý các gói NuGet cho giải pháp (menu ngữ cảnh trong Solution Explorer),
  • Cho phép NuGet tải xuống các gói (cài đặt) bị thiếu,
  • Tự động kiểm tra các gói bị thiếu trong quá trình xây dựng trong Visual Studio (cài đặt),

các gói nhất định có thể yêu cầu cài đặt lại thủ công. Tôi không biết điều gì gây nhầm lẫn cho NuGet, có thể xóa thủ công một tham chiếu, nhưng đây là giải pháp tôi thường áp dụng trong những trường hợp như vậy. Bảng điều khiển PM sau đây giúp khôi phục một gói trong khi vẫn giữ nguyên phiên bản gốc (không cập nhật lên phiên bản mới hiện có):

Cập nhật-Gói Microsoft.Web.Infra Structure-Cài đặt lại

Có thể yêu cầu bảo toàn phiên bản nếu bạn không muốn vô tình ghi đè gói hiện có bằng phiên bản mới hơn của nó, điều này có thể loại bỏ chức năng "cũ" mà bạn có thể đã sử dụng trong dự án của mình.

Và, như một bằng chứng, mặc dù hơi dài dòng, rằng phiên bản không thay đổi, đây là kết quả đầu ra khi lệnh được thực thi:

PM> Update-Package Microsoft.Web.Infrastructure -Reinstall
Attempting to gather dependencies information for multiple packages with respect to project 'Samples.NuGet\DemoApp\DemoApp', targeting '.NETFramework,Version=v4.5.2'
Attempting to resolve dependencies for multiple packages
Resolving actions install multiple packages
...
Package removal starts here...
...
Removed package 'Microsoft.AspNet.Web.Optimization 1.1.3' from 'packages.config'
Successfully uninstalled 'Microsoft.AspNet.Web.Optimization 1.1.3' from DemoApp
Removed package 'WebGrease 1.5.2' from 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\uninstall.ps1'
Successfully uninstalled 'WebGrease 1.5.2' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Microsoft.Web.Infrastructure 1.0.0.0' from 'packages.config'
Successfully uninstalled 'Microsoft.Web.Infrastructure 1.0.0.0' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Antlr 3.4.1.9004' from 'packages.config'
Successfully uninstalled 'Antlr 3.4.1.9004' from MvcLenseApp
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
--- Install packages (in reverse order) ---
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Antlr.3.4.1.9004' to 'packages.config'
Successfully installed 'Antlr 3.4.1.9004' to DemoApp
...
More package installs here. Omitted for brevity...
...
Package 'Microsoft.Web.Infrastructure.1.0.0' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
Added package 'Microsoft.Web.Infrastructure.1.0.0' to 'packages.config'
Successfully installed 'Microsoft.Web.Infrastructure 1.0.0' to MvcLenseApp
...
More package installs here. Omitted for brevity...
...
Package 'WebGrease.1.5.2' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'WebGrease.1.5.2' to 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\install.ps1'
Successfully installed 'WebGrease 1.5.2' to DemoApp
Package 'Microsoft.AspNet.Web.Optimization.1.1.3' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Microsoft.AspNet.Web.Optimization.1.1.3' to 'packages.config'
...
End of package re-install. 
...
Successfully installed 'Microsoft.AspNet.Web.Optimization 1.1.3' to DemoApp
PM> 

Tất nhiên nếu bạn muốn cài đặt lại tất cả các gói, bạn có thể cần phải làm quen với các lệnh cập nhật / cài đặt trong NuGet tại đâytại đây .


27

Tôi thấy rằng mặc dù nó hoạt động trên hộp dev của tôi, nhưng assembly vẫn chưa được thêm vào dự án. Tìm kiếm Microsoft.Web.Infra Structure trong NuGet và cài đặt nó từ đó. Sau đó, hãy đảm bảo rằng nó đã chọn Copy Local.


1
Cùng một vấn đề, nó xảy ra trên CopyLocal = True, không hiểu sao nó không hoạt động. Giải pháp của bạn đã giải quyết được vấn đề của tôi :)
GôTô

6

Đã gặp sự cố này trên máy Windows 10 mới trên VS2015 với một dự án hiện có. Trình quản lý gói 3.4.4. Đã bật khôi phục gói.

Việc khôi phục dường như không hoạt động hoàn toàn. Phải chạy phần sau trên dòng lệnh Package Manager

Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall

Điều này đã thực hiện các thay đổi sau đây đối với tệp giải pháp của tôi mà việc khôi phục KHÔNG thực hiện được.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

Chỉ cần thêm các phần tử trên vào phần ItemGroup trong tệp giải pháp của bạn CŨNG sẽ giải quyết được vấn đề với điều kiện là tồn tại .. \ package \ Microsoft.Web.Infra Architecture.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infraosystem.dll.

Dễ dàng hơn chỉ cần thực hiện cài đặt -Reinstall nhưng hiểu được những gì nó làm khác với khôi phục gói.


Tôi đã từng gặp vấn đề tương tự. Đã thử "Khôi phục gói số" tùy chọn menu nhấp chuột phải của giải pháp. Đầu ra cho tôi biết không có gì để khôi phục. Theo lời khuyên của bạn, tôi chạy Update-Package -ProjectName "tên dự án của tôi ở đây" từ người quản lý gói giao diện điều khiển và tất cả các gói đã được thêm vào một cách chính xác
Rob Bowman

@RobBowman Thật tuyệt, Rob. Nó có thể không thành vấn đề trong trường hợp của bạn nhưng hãy cẩn thận bao gồm cả cờ -Reinstall. Điều này sẽ đảm bảo bạn kết thúc với các phiên bản gói giống như trước đây. Nếu bạn bỏ qua cờ này, nó sẽ cập nhật gói của bạn lên phiên bản mới nhất, điều này có thể gây ra sự cố nếu bạn không có ý định làm điều đó. Xem phần này để biết thông tin đầy đủ docs.microsoft.com/en-us/nuget/tools/ps-ref-update-package
Rohan

5

Resharper phát hiện Microsoft.Web.Infra Structure là một tham chiếu không được sử dụng nên tôi đã xóa nó. Tại địa phương đã hoạt động tốt nhưng sau đó tôi gặp lỗi tương tự sau khi xuất bản cho nhà phát triển.

Kết luận, hãy cẩn thận khi xóa các tham chiếu được đánh dấu là không sử dụng bởi Resharper


Đây chính xác là những gì tôi đã làm.
AndreFeijo

trong trường hợp của tôi, trang web của tôi hoạt động trong plesk mà không có "Microsoft.Web.Infraosystem.dll" nhưng khi chuyển sang cpanel, lỗi này đã hiển thị!
Omid-RH


3

Tôi đã có một vấn đề tương tự. NuGet cho thấy gói được cài đặt thành công, nhưng tham chiếu không được thêm vào dự án của tôi.

Chạy <PM> Install-Package Microsoft.Web.InfraStructurecũng không giúp được gì vì người quản lý gói liên tục nói rằng nó đã được cài đặt

Cuối cùng tôi đã thêm nó theo cách thủ công bằng cách chỉnh sửa tệp csproj và thêm những dòng sau:

 <Reference Include="Microsoft.Web.Infrastructure">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

Điều đó đã giải quyết vấn đề.


Tôi đã xác minh tệp csproj và nó đang tham chiếu đến một thư mục gây ra sự cố. Loại bỏ đó thêm tên thư mục giải quyết vấn đề của tôi
superachu

2

Bạn cần tải xuống khung ASP.NET MVC trên máy chủ lưu trữ ứng dụng của bạn. Đó là một bản sửa lỗi nhanh chóng chỉ cần tải xuống và cài đặt từ đây (Đây là khuôn khổ MVC 3 http://www.asp.net/mvc/mvc3 ), sau đó bùng nổ là bạn đã sẵn sàng.


2

Đối với tôi Microsoft.Web.Infrastructure.dll, thư mục bin bị thiếu, nó không được thiết lập để sao chép cục bộ trong dự án. Đã sao chép dll từ một dự án khác trong giải pháp và trang sẽ tải.


2

Trước tiên, hãy xóa Microsoft.Web.Infra Structure khỏi package.config.

và chạy lại lệnh

PM> Install-Package Microsoft.Web.Infra Structure và đảm bảo thuộc tính Copy Local phải là true.


1

Giải pháp rất dễ dàng:

Trong Visual Studio, đi tới Công cụ / Trình quản lý gói thư viện / Bảng điều khiển Trình quản lý gói

<PM> Install-Package Microsoft.Web.InfraStructure

Chúc vui vẻ


1

Đây là kịch bản của tôi.

Tôi đã có một giải pháp đa dự án chứa các dự án A, B, C .. N.

Dự án B là một thư viện mã chứa một nhà máy cho selectlistcác đối tượng.

Dự án sẽ chạy như mong đợi trong quá trình phát triển, nhưng khi xuất bản lên môi trường thử nghiệm của chúng tôi, tôi đã gặp lỗi mà bạn đang gặp phải:

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

Điều gì đã xảy ra là thông qua trình quản lý gói nuget, tôi đã vô tình cài đặt "Microsoft ASP.NET MVC" đã cài đặt các phụ thuộc cho:

  • Microsoft.AspNet.Razor
  • Microsoft.AspNet.WebPages

Thấp và kìa, Microsoft.AspNet.WebPages phụ thuộc vào "Microsoft.Web.Infra Structure".

Giải pháp của tôi là gỡ cài đặt ba gói được đề cập ở trên (MVC, Razor, WebPages) sau đó nhấp chuột phải vào tham chiếu> thêm tham chiếu> Assemblies> Phần mở rộng> System.Web.MVC.


Tôi không thể thêm qua Lắp ráp, nhưng cộng lại gói NuGet giải quyết vấn đề
Nitesh

1

Tôi đã phải đặt "Sao chép cục bộ" trong Thuộc tính tham chiếu thành Sai, sau đó trở lại Đúng. Thực hiện việc này đã thêm cài đặt Private True vào tệp .csproj.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">      <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
      <Private>True</Private>
    </Reference>

Tôi đã cho rằng điều này đã được đặt, vì "Bản sao cục bộ" được hiển thị là Đúng.


0

Tôi không biết điều gì đã xảy ra với dự án của mình nhưng nó đã tham chiếu sai đường dẫn đến DLL. Nuget đã cài đặt nó đúng cách và nó thực sự nằm trên hệ thống tệp của tôi cùng với các gói khác nhưng chỉ được tham chiếu không chính xác.

Các packagesthư mục tồn tại hai thư mục lên từ dự án của tôi và nó chỉ đi lên từng người bắt đầu con đường với ..\packages\. Tôi đã thay đổi đường dẫn để bắt đầu ..\..\packages\và nó đã khắc phục sự cố của tôi.


0

Trên máy của tôi, phần phụ thuộc Nuget không được tải xuống đúng cách, thư mục lib bên trong gói nuget không tồn tại, do đó xảy ra lỗi.

Trước

nhập mô tả hình ảnh ở đây

Tôi đã đổi tên Gói Nuget trong thư mục gói và Nuget đã tải lại nó một cách chính xác với thư mục lib cần thiết.

Sau nhập mô tả hình ảnh ở đây


0

Trong một số trường hợp làm sạch các dự án / giải pháp, thể chất loại bỏ bin/obj/và xây dựng lại sẽ khắc phục lỗi đó. Điều này có thể xảy ra khi, ví dụ, một số gói và tham chiếu được cài đặt / thêm vào và sau đó bị xóa, để lại một số hiện vật.

Nó đã xảy ra với tôi với Microsoft.Web.Infrastructure: ban đầu, dự án không yêu cầu lắp ráp đó. Sau một số thử nghiệm, hiệu ứng ròng của nó được cho là bằng 0 vào cuối cùng, tôi đã nhận được ngoại lệ này. Các bước trên đã giải quyết nó mà không cần cài đặt phụ thuộc không sử dụng.


0

Tôi đã có vấn đề này. Tôi đã đưa DLL vào dự án và cài đặt thành Copy Local là đúng theo mặc định. Không biết tại sao nó lại bắt đầu, vì DLL đó đã nằm trong dự án một thời gian dài. Tôi đã nghe một số đề cập về việc ReSharper có thể xóa nó, nhưng tôi không thể nói rằng tôi đã chạy một loại bỏ tham chiếu không sử dụng.

Điều đã giúp tôi là: - Chạy "Update-Package Microsoft.Web.Infraosystem -Reinstall" trên dự án, đã cập nhật toàn bộ giải pháp, nhưng cuối cùng không giúp ích gì cho chính nó. - Sau đó, tôi xem qua các tham chiếu của dự án và đặt Copy Local thành false, sau đó trở lại true. Điều này thực sự dẫn đến một dòng được thêm vào tệp CSPROJ dưới tham chiếu DLL: True. Hoặc một cái gì đó dọc theo dòng ... Dù bằng cách nào, bây giờ bản dựng đang sao chép các tệp như mong đợi.


0

Vì vậy, đây là những gì hiệu quả với tôi khi sử dụng VS2019. Tôi gặp lỗi này khi cố gắng cập nhật các gói Nuget trên một dự án trong khi Microsoft.Web.Infra Structure nằm trong một dự án khác trong cùng một giải pháp. Tôi đã phải xóa thư mục Microsoft.Web.Infra Structure.1.0.0.0 khỏi thư mục Packages trong dự án của mình. Đã cài đặt lại nó thông qua nuget và sau đó mọi thứ bắt đầu hoạt động trở lại. Những thứ điên rồ.

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.