无法加载文件或程序集'Microsoft.Web.Infrastructure,

use*_*351 73 c# asp.net-mvc

我试图将我的网站上传到服务器.它与我的本地主机一起工作正常,所以我将localhost wwwroot文件夹中的所有内容上传到服务器并更改了连接字符串.

但是有这个错误:

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()
Run Code Online (Sandbox Code Playgroud)

该项目是nopcommerce.

应该怎么做才能解决这个错误?

Col*_*ear 56

您需要在项目中包含dll并添加对它的引用.

以下是Stack上已存在的类似问题的链接: MVC3部署依赖性问题

  • 此链接所遵循的博客似乎不再可用.这个答案 - http://stackoverflow.com/a/12683392/137474为我工作. (4认同)

ria*_*ndl 35

在进行参考清理之后,它被删除了Microsoft.Web.Infrastructure,但是没有从packages.config文件中删除.在尝试使用它再次添加它之后Package Manager Console,Visual Studio说它已经安装了,因为它已被删除,所以它是假的.

然后我删除了packages.config文件中的代码行

<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
Run Code Online (Sandbox Code Playgroud)

并再次运行命令

PM> Install-Package Microsoft.Web.Infrastructure
Run Code Online (Sandbox Code Playgroud)

在此之后,现在它工作正常.


小智 29

这里下载的安装AspNetMVC3ToolsUpdateSetup可以不添加引用的情况下解决此问题


jwr*_*ail 27

我发现即使它在我的开发盒上工作,组件也没有添加到项目中.在NuGet中搜索Microsoft.Web.Infrastructure并从那里安装它.然后,确保选中"复制本地".


Ale*_*tov 24

尽管答案的数量很多,但我还会添加另一个恕我直言的东西让事情变得更加清晰.

正如Robwrightmail已经提到的那样Microsoft.Web.Infrastructure是一个NuGet包(不需要链接,你可以在NuGet包管理器中使用它).

显然,它被你的项目引用并突然消失了.可能存在许多原因,但重要的是尽管您可能已在Visual Studio中启用了自动包还原:

  • 管理解决方案的NuGet包(解决方案资源管理器中的上下文菜单),
  • 允许NuGet下载丢失的包(设置),
  • 在Visual Studio(设置)中构建期间自动检查缺少的包,

某些包可能需要手动重新安装.我不知道是什么让NuGet感到困惑,可能会手动删除引用,但这里是我通常在这种情况下应用的解决方案.以下PM控制台帮助恢复包,同时保留原始版本(不更新到可能存在的新版本):

更新包Microsoft.Web.Infrastructure -Reinstall

如果您不想意外地使用其较新版本覆盖现有软件包,可能需要删除您可能已在项目中使用的"旧"功能,则可能需要保留版本.

并且,作为证明,尽管有点冗长,但版本不会改变,这是执行命令时的输出:

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> 
Run Code Online (Sandbox Code Playgroud)

当然,如果你想重新安装,您可能需要熟悉更新所有包/中的NuGet安装命令在这里这里.


Ivo*_*Ivo 5

尝试从https://www.microsoft.com/web/platform/安装 Web 平台

希望能帮助到你。


Jav*_*ier 5

Resharper将Microsoft.Web.Infrastructure检测为未使用的引用,因此我删除了它.本地工作正常,但在发布到开发后我得到了同样的错误.

结论,在删除Resharper标记为未使用的引用时要小心


Roh*_*han 5

在带有现有项目的VS2015上的新Windows 10计算机上体验了此问题。软件包管理器3.4.4。恢复软件包已启用。

还原似乎无法完全正常进行。必须在Package Manager命令行上运行以下命令

Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall
Run Code Online (Sandbox Code Playgroud)

这对我的解决方案文件进行了以下更改,而还原未执行该更改。

<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>
Run Code Online (Sandbox Code Playgroud)

只要在.. \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll存在的情况下,只需将上述元素添加到解决方案文件中的ItemGroup部分,即可解决该问题。

只需执行-Reinstall即可,但很容易理解它与软件包还原的不同之处。