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


79

我试图将我的网站上传到服务器。我的本地主机运行良好,因此我将localhostwwwroot文件夹中的所有内容上传到服务器并更改了连接字符串。

但是有这个错误:

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()

该项目是nopcommerce

如何解决此错误?


复制可能不起作用,因为主机没有安装相同的依赖关系,请查看此指南:iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio
Mike

Answers:


57

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

这是堆栈上已经存在的类似问题的链接: MVC3部署依赖性问题


还必须将“ _bin_deployableAssemblies”文件上传到服务器?
user1348351 2012年

有几种不同的处理方式,这也取决于您的部署方式。但是,如果您单击我的帖子中的链接,然后在顶部答案的博客上打勾,您会看到,如果正确设置了_bin_deployableAssemblies中的dll,则在执行操作时应该会自动对其进行处理。部署(或Web部署)。这是我提到的博客的链接。
科林·皮尔

5
该链接所跟踪到的博客似乎不再可用。这个答案-stackoverflow.com/a/12683392/137474为我工作。
Baldy 2014年

@ColinPear,非常感谢,正是我想要的。我有一个要求这样做的电子商务Web应用程序!
PatsonLeaner '18年

就我而言,我的网站没有“ Microsoft.Web.Infrastructure.dll”即可正常运行,但是当移至cpanel时,此错误已显示!
Omid-RH

39

事实证明,在进行参考清洗后,它已从中删除Microsoft.Web.Infrastructure,但未从packages.config文件中删除。在尝试使用再次添加它之后Package Manager Console,Visual Studio表示已经安装了它,这是错误的,因为已将其删除。

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

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

并再次运行命令

PM> Install-Package Microsoft.Web.Infrastructure

在此之后,现在可以正常工作了。



28

尽管答案很多,但我将添加另一个答案,恕我直言使事情变得更清晰。

Robwrightmail所述,它Microsoft.Web.Infrastructure是一个NuGet程序包(不需要链接,您可以在NuGet程序包管理器中找到它)。

显然,它已被您的项目引用,并突然消失了。可能存在多种原因,但重要的是,尽管您可以通过以下方式在Visual Studio中启用“自动打包还原”

  • 管理解决方案的NuGet程序包(解决方案资源管理器中的上下文菜单),
  • 允许NuGet下载缺少的软件包(设置),
  • 在Visual Studio(设置)中进行构建时自动检查缺少的软件包,

某些软件包可能需要手动重新安装。我不知道是什么让NuGet感到困惑,也许是手动删除引用,但这是我在这种情况下通常采用的解决方案。以下PM控制台有助于在保留原始版本的同时还原软件包(不更新为可能存在的新版本):

更新包Microsoft.Web.Infrastructure-重新安装

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

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

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> 

当然,如果您希望重新安装所有软件包,则可能需要在此处此处的NuGet中熟悉更新/安装命令。


27

我发现,即使它可以在我的开发箱中使用,程序集也没有添加到项目中。在NuGet中搜索Microsoft.Web.Infrastructure并从那里安装它。然后,确保已选择“本地复制”。


1
同样的问题,它在CopyLocal = True上,不知道为什么它不起作用。您的解决方案解决了我的问题:)
GOTO

6

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

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

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

这对我的解决方案文件进行了以下更改,而还原则没有。

<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>

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

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


我有同样的问题。尝试解决方案的“还原nuget包”右键单击菜单选项。输出告诉我没有什么可恢复的。按照您的建议,我从程序包管理器控制台中运行Update-Package -ProjectName“我的项目名称在这里”,并正确添加了所有程序包
Rob Bowman

@RobBowman真棒。对于您而言,这可能无关紧要,但请注意还包括-Reinstall标志。这样可以确保最终获得与以前相同的软件包版本。如果您省略此标志,它将把您的软件包更新为最新版本,如果您不打算这样做,可能会导致问题。有关完整的信息,请参阅此文档docs.microsoft.com/zh-cn/nuget/tools/ps-ref-update-package
Rohan

5

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

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


这正是我所做的。
AndreFeijo

就我而言,我的网站没有“ Microsoft.Web.Infrastructure.dll”即可正常运行,但是当移至cpanel时,此错误已显示!
Omid-RH


3

我有一个类似的问题。NuGet显示该软件包已成功安装,但该参考未添加到我的项目中。

跑步 <PM> Install-Package Microsoft.Web.InfraStructure也无济于事,因为程序包管理器一直在说它已经安装了

我最终通过编辑csproj文件并添加以下行来手动添加它:

 <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>

那解决了问题。


我验证了csproj文件,它引用的是引起问题的文件夹。删除该额外的文件夹名称解决了我的问题
superachu

2

您需要在托管应用程序的服务器上下载ASP.NET MVC框架。这是一个快速修复程序,只需从此处下载并安装(这是MVC 3框架http://www.asp.net/mvc/mvc3),然后就可以开始了。


2

对于我来说Microsoft.Web.Infrastructure.dll,bin文件夹中没有它,它没有设置为在项目中复制本地。从解决方案中的另一个项目中复制了dll,并加载了页面。


2

首先从package.config中删除Microsoft.Web.Infrastructure。

并再次运行命令

PM>安装Microsoft.Web.Infrastructure软件包,并确保“复制本地”属性为true。


1

很简单的解决方案:

在Visual Studio中,转到“工具/库包管理器” /“包管理器控制台”

<PM> Install-Package Microsoft.Web.InfraStructure

玩得开心


1

这是我的情况。

我有一个包含项目A,B,C..N的多项目解决方案。

项目B是一个代码库,其中包含一个工厂 selectlist对象。

该项目将按照开发中的预期运行,但是在发布到我们的测试环境时,我遇到了遇到的错误:

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.

发生的事情是通过nuget软件包管理器,我不小心安装了“ Microsoft ASP.NET MVC”,该安装了以下项的依赖项:

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

低估,Microsoft.AspNet.WebPages取决于“ Microsoft.Web.Infrastructure”。

我的解决方案是卸载上述三个软件包(MVC,Razor,WebPages),然后右键单击引用>添加引用>程序集>扩展> System.Web.MVC。


我无法通过Assembles添加,但重新添加Nuget软件包即可解决问题
Nitesh,

1

我必须将“引用属性”中的“本地复制”设置为False,然后再设置为True。这样做可以将Private True设置添加到.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>

我以为已经设置好了,因为“本地复制”显示为True。


0

我不知道我的项目发生了什么,但它引用了错误的DLL路径。Nuget正确安装了它,它确实与其他软件包一起位于我的文件系统中,但引用不正确。

packages文件夹在我的项目中存在两个目录,并且仅通过以开头路径来向上一个目录..\packages\。我更改了开始的路径,..\..\packages\并解决了我的问题。


0

在我的机器上,Nuget依赖项未正确下载,nuget包中的lib文件夹不存在,因此出现错误。

之前

在此处输入图片说明

我在packages文件夹中重命名了Nuget Package,并使用必要的lib文件夹正确地重新下载了Nuget Package。

在此处输入图片说明


0

在某些情况下,清洁项目/解决方案,物理拆除bin/obj/和重建将解决此类错误。例如,当某些软件包和引用被安装/添加然后被删除,从而留下一些工件时,可能会发生这种情况。

它发生在我身上Microsoft.Web.Infrastructure:最初,该项目不需要该程序集。经过一些实验,最终的净效果应该为零,我得到了这个例外。以上步骤解决了该问题,而无需安装未使用的依赖项。


0

我有这个问题。我将DLL包含在项目中,默认情况下,“复制本地”设置为true。不知道它为什么启动,因为该DLL在项目中已经存在了很长时间。我听说有人提到ReSharper可能会删除它,但是我不能说我已经运行了一个未使用的参考删除。

帮助我的是:-在项目上运行“ Update-Package Microsoft.Web.Infrastructure -Reinstall”,它更新了整个解决方案,但最终并没有提供帮助。-然后,我浏览了项目的引用,并将“本地复制”设置为false,然后又设置为true。这实际上导致在DLL参考:True下将一行添加到CSPROJ文件中。或类似的东西...不管哪种方式,现在构建都按预期方式复制文件。


0

所以,这是使用VS2019对我有用的东西。当Microsoft.Web.Infrastructure位于同一解决方案的另一个项目中时,尝试在一个项目上更新Nuget软件包时遇到此错误。我必须从项目的Packages文件夹中删除Microsoft.Web.Infrastructure.1.0.0.0文件夹。通过nuget重新安装了它,然后一切再次开始工作。疯狂的事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.