81

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

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

4

20 回答 20

58

You will need to include the dll with your project and add a reference to it as well.

Here is a link to a similar issue already on Stack: MVC3 Deployment Dependency Problems

于 2012-10-31T01:17:39.687 回答
40

事实证明,在进行参考清理后,它删除了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

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

于 2015-04-06T20:12:10.670 回答
33

安装从此处下载的 AspNetMVC3ToolsUpdateSetup将解决此问题而无需添加参考

于 2013-01-14T16:26:17.210 回答
32

尽管答案数量很多,但我会添加另一个答案,恕我直言,这会让事情变得更清楚。

正如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 中的更新/安装命令。

于 2015-09-08T06:17:27.237 回答
27

I found that even though it worked on my dev box, the assembly wasn't added to the project. Search for Microsoft.Web.Infrastructure in NuGet and install it from there. Then, make sure it has Copy Local selected.

于 2013-06-11T23:54:46.043 回答
8

在具有现有项目的 VS2015 上的新 Windows 10 机器上遇到此问题。包管理器 3.4.4。启用恢复包。

恢复似乎并不完全有效。必须在包管理器命令行上运行以下命令

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 更容易,但很高兴了解它对包还原的不同之处。

于 2018-05-23T08:24:28.823 回答
5

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

希望能帮助到你。

于 2012-10-31T01:13:19.117 回答
5

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

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

于 2015-05-30T03:29:15.703 回答
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>

这解决了问题。

于 2015-12-16T09:45:52.557 回答
2

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

于 2012-11-09T15:29:02.343 回答
2

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

并再次运行命令

PM> Install-Package Microsoft.Web.Infrastructure 并确保 Copy Local 属性应为 true。

于 2018-10-29T10:05:08.497 回答
2

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

于 2017-06-20T08:26:16.393 回答
1

非常简单的解决方案:

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

<PM> Install-Package Microsoft.Web.InfraStructure

玩得开心

于 2014-11-30T08:26:02.500 回答
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。

于 2015-07-31T17:26:15.690 回答
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。

于 2020-02-25T23:27:48.290 回答
0

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

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

于 2019-08-03T06:29:15.397 回答
0

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

对我有帮助的是: - 在项目上运行“Update-Package Microsoft.Web.Infrastructure -Reinstall”,它更新了整个解决方案,但最终并没有帮助自己。- 然后我浏览了项目的引用并将 Copy Local 设置为 false,然后返回 true。这实际上导致在 DLL 引用下的 CSPROJ 文件中添加了一行:True。或者类似的东西......无论哪种方式,现在构建正在按预期复制文件。

于 2020-04-08T05:03:57.513 回答
0

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

于 2020-05-29T15:37:18.617 回答
0

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

在此处输入图像描述

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

在此处输入图像描述

于 2018-08-10T13:37:33.267 回答
0

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

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

于 2017-10-04T14:43:03.950 回答