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

我试着把我的网站上传到服务器上。它在我的本地主机上运行良好,因此我将本地主机 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()

这个项目是 nopcommerce

应该做些什么来解决这个错误?

254711 次浏览

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

希望能有帮助。

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

下面是一个已经在 Stack 上出现的类似问题的链接: MVC3部署依赖性问题

你需要在服务器上下载你的应用程序的 ASP.NET MVC Framework。这是一个快速修复只需下载和安装从这里(这是 MVC 3框架 http://www.asp.net/mvc/mvc3) ,然后繁荣你是好去。

安装从 给你下载的 AspNetMVC3ToolsUpdateSetup 可以解决这个问题,而不需要添加参考

我发现,即使它在我的开发箱上工作,程序集也没有被添加到项目中。搜索 Microsoft。韦伯。在 NuGet 中安装基础设施。然后,确保选择了 CopyLocal。

非常简单的解决办法:

在 VisualStudio 中,转到 Tools/Library Package Manager/Package Manager Console

<PM> Install-Package Microsoft.Web.InfraStructure

玩得开心

结果是,在执行引用清理之后,它删除了 Microsoft.Web.Infrastructure,但是没有从 packages.config 文件中删除。在尝试使用 Package Manager Console再次添加它之后,VisualStudio 说它已经安装了,这是假的,因为它已经被删除了。

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

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

再次运行命令

PM> Install-Package Microsoft.Web.Infrastructure

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

Resharper 检测到微软。韦伯。基础设施作为一个未使用的引用,所以我删除了它。本地工作正常,但是在发布到 dev 之后我得到了同样的错误。

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

我是这么想的。

我有一个包含项目 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”,它安装了以下依赖项:

  • 微软,AspNet,剃刀
  • 微软。 AspNet。网页

请看,Microsoft.AspNet.WebPages 依赖于“ Microsoft.Web.Infrastructure”。

我的解决方案是卸载上面提到的三个软件包(MVC、 Razor、 WebPages) ,然后右键单击参考 > 添加参考 > 装配 > 扩展 > 系统。Web.MVC.

尽管答案的数量,我将添加另一个恕我直言,使事情更清楚一点。

正如 罗伯Wightmail已经提到的,Microsoft.Web.Infrastructure是一个 NuGet 软件包(不需要链接,你可以在 NuGet 软件包管理器中找到它)。

很显然,它被你的项目引用了然后突然消失了。可能存在一些原因,但重要的是,尽管你可能已经通过以下方式启用了 在 VisualStudio 中自动还原包:

  • 为解决方案管理 NuGet 包(解决方案资源管理器中的上下文菜单) ,
  • 允许 NuGet 下载丢失的软件包(设置) ,
  • 在 VisualStudio 中生成期间自动检查丢失的包(设置) ,

某些软件包可能需要手动重新安装。我不知道是什么让 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 给你给你中的更新/安装命令。

我也遇到过类似的问题,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>

问题解决了。

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

我不知道我的项目发生了什么,但它引用了错误的路径到 DLL。Nuget 正确地安装了它,它确实和其他包一起在我的文件系统中,只是引用不正确。

packages文件夹在我的项目之上有两个目录,而且通过使用 ..\packages\启动路径它只向上运行了一个目录。我改变了路径,从 ..\..\packages\开始,它解决了我的问题。

在 VS2015上的新 Windows10机器上与一个现有项目一起经历了这个问题。 包管理器3.4.4。 启用还原包。

恢复似乎没有完全起作用。 必须在 PackageManager 命令行上运行以下命令

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>

Just adding the above elements to the ItemGroup section in you solution file will ALSO solve the issue provided that ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll exist.

更容易只做-重新安装,但很好地了解它做了什么不同的包恢复。

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

之前

enter image description here

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

之后 enter image description here

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

再次运行命令

PM > 安装软件包 并确保 CopyLocal 属性应为 true。

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

这种情况发生在我的 Microsoft.Web.Infrastructure上: 最初,这个项目不需要组装。经过一些实验,最后的净效应应该是零,我得到了这个例外。以上步骤解决了这个问题,而不需要安装未使用的依赖项。

我必须在参考属性中将“ CopyLocal”设置为 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>

因为“ CopyLocal”显示为 True,所以我假设这已经设置好了。

我有个问题。我将 DLL 包含在项目中,并且默认情况下“复制本地”设置为 true。 不知道为什么它开始,因为该 DLL 在该项目中很长一段时间。我听说过 ReSharper 可能会删除它,但我不能说我运行了一个未使用的引用删除。

帮助我的是: - 运行「更新-微软软件包」。韦伯。“基础设施-重新安装”的项目,它更新了整个解决方案,但最终并没有起到帮助作用。 - 然后我检查了项目的引用,将 CopyLocal 设置为 false,然后返回 true。这实际上导致将一行添加到 DLL 引用: True 下的 CSPROJ 文件中。或者类似的东西... 不管怎样,现在构建正在按预期复制文件。

所以,这就是我使用 VS2019的成功之处。我得到这个错误,试图更新一个项目的 Nuget 包,而微软。韦伯。基础设施位于同一解决方案中的不同项目中。我不得不删除微软。韦伯。我的项目的 Packages 文件夹中的 Infrastructure. 1.0.0.0文件夹。通过 nuget 重新安装,然后一切又开始工作了。疯狂的事。