92

我有一个小型网络应用程序。在我在我的应用程序中添加两个 genericHandler 之前,它工作正常。

我对 http 处理程序进行了以下更改

 <system.web>
    <authentication mode="Forms" >
        <forms protection="All" timeout="720" defaultUrl="Default.aspx" loginUrl="Login.aspx" >
        </forms>
    </authentication>
    <authorization>
        <deny users="?"/>
    </authorization>
    <compilation debug="true" targetFramework="4.0" />

    <httpHandlers>
        <!--Code Log Handler-->
        <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendOWA" path="SendOWA.ashx" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendSOS" path="SendSOS.ashx" />
    </httpHandlers>
    <customErrors mode="Off">
        <error statusCode="404" redirect="Templates/PageNotFound.html" />
    </customErrors>
</system.web>
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <!--Code Log Handler-->
        <add name="LogHandler1" path="SendOWA.ashx" verb="*" type="InfoDomeNewUI.Handler.SendOWA"/>
        <!-- SMS SENDER-->
        <add name="SendSOS" path="SendSOS.ashx" verb="*" type="InfoDomeNewUI.Handler.SendSOS"/>
    </handlers>
</system.webServer>

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.

我正在使用 asp.net4.0 和 C#。我没有
在本地主机上使用 MVC,它工作正常。
但是当我托管已发布的代码时,它给了我上述错误。

堆栈跟踪:-

[FileNotFoundException:无法加载文件或程序集“Microsoft.Web.Infrastructure,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register() +0

[InvalidOperationException:System.Web.Http.WebHost.PreApplicationStartCode 类型的预应用程序启动初始化方法 Start 引发异常,并显示以下错误消息:无法加载文件或程序集 'Microsoft.Web.Infrastructure,版本 = 1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件..] System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods() +465 System.Web.Hosting.HostingEnvironment.Initialize( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLeve

[HttpException (0x80004005): System.Web.Http.WebHost.PreApplicationStartCode 类型上的预应用程序启动初始化方法 Start 引发异常,并显示以下错误消息:无法加载文件或程序集 'Microsoft.Web.Infrastructure,版本 = 1.0 .0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件..] System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11697760 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4866485

4

14 回答 14

198

似乎Microsoft.Web.Infrastructure.dll没有安装在 GAC 中,即使 .net(4.0 或 4.5 或其他)已成功安装在 Windows Server 上。在 localhost(通常是 Windows 客户端)上,安装工具/平台(Visual Studio 等)时,它似乎在 GAC 中。

作为一种可能的解决方法,请尝试以下方法:

  1. 在包管理器控制台中运行以下命令。(如果您使用的是 Visual Studio,可以通过菜单选项“工具 --> 库包管理器 --> 包管理器控制台:)

    PM> Install-Package Microsoft.Web.Infrastructure
    

    如果安装成功,您将看到以下消息。

    Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
    Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
    
  2. 您会注意到Microsoft.Web.Infrastructure.dll现在已作为参考添加(可以在解决方案资源管理器的项目的参考文件夹中看到)

  3. 如果您查看此参考的属性,您会注意到“ Copy Local ”默认设置为“ True ”。

  4. 现在,当您“发布”您的项目时,Microsoft.Web.Infrastructure.dll将被部署。

于 2012-10-02T01:33:36.143 回答
19

我通过 WPI 安装了 MVC4,它帮助了我。

于 2012-12-21T04:24:13.627 回答
15

我有同样的问题。当我尝试接受的答案 (rockyb) 时,我收到该软件包已安装并分配给我的项目的消息。但是,当我检查参考列表时,它没有被引用。

Microsoft.Web.Infrastructure 安装在我的解决方案的包文件夹中。我没有使用 NuGet 添加包,而是使用了添加引用选项。在弹出窗口的左侧,我选择了浏览,然后按下窗口底部的浏览按钮。我导航到我的解决方案所在文件夹下的 packages 文件夹,然后深入到 ...\mysolution\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40 并单击 Microsoft.Web.Infrastructure .dll。单击确定后,该包出现在我的参考列表中。我使用 Web Deploy Package 选项来部署我的网站,一切正常。

于 2015-08-18T13:18:18.983 回答
9

为什么不手动将 Microsoft.Web.Infrastructure.dll 文件复制到服务器 BIN 文件夹中。这适用于。我的项目是VS2010网站。

该文件可以位于:

C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40

只需将其复制并粘贴到 BIN 文件夹中即可。

如果您还没有它,您可能需要将它包含在 web.config 中

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

参考:http ://thedeveloperblog.com/

于 2016-04-22T06:08:55.743 回答
6

我发现了问题。(.cs)我没有错误地添加类文件,而是添加了一个类Web API Controller,该类在我的解决方案中添加了一个配置文件。该配置文件正在寻找提到的 DLL (Microsoft.Web.Infrastructure 1.0.0.0)。当我删除该文件,清理应用程序然后发布时,它起作用了。

于 2012-10-03T05:25:02.733 回答
5

通过安装 Microsoft.Web.Infrastructure 后Nuget-Package Manager

PM> Install-Package Microsoft.Web.Infrastructure

Microsoft.Web.Infrastructure.dll从 Web 应用程序的文件夹中手动复制Nuget-Package,然后将其粘贴到部署在 Web 服务器上的 Web 应用程序的 bin 文件夹中。

包\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll

它对我有用。

于 2016-02-04T15:52:20.117 回答
4

Update-Package -reinstall Microsoft.Web.Infrastructure对我不起作用,因为我不断收到它已经安装的错误。

我必须导航到包文件夹中的Microsoft.Web.Infrastructure.1.0.0.0文件夹并手动删除该文件夹。

完成此操作后,运行Install-Package Microsoft.Web.Infrastructure安装它。

注意:CopyLocal被自动设置为true。

于 2017-09-06T07:19:32.063 回答
0

我遇到了同样的问题,并且“Microsoft.Web.Infrastructure.dll”似乎丢失了。我尝试了一些建议并安装了 MVC 等,但没有任何帮助。解决方案是安装“Web Services Enhancements (WSE) 1.0 SP1 for Microsoft .NET”,其中包括 Microsoft.Web.Infrastructure.dll。可在:http ://www.microsoft.com/en-gb/download/details.aspx?id=4065

于 2015-07-16T13:22:35.317 回答
0

我有同样的问题。我尝试安装 Visual Studio 2010 SP1,但没有成功。

最后我从同事那里得到了 Microsoft.Web.Infrastructure.dll。您可以在项目运行良好的朋友 PC 中找到该 dll。尝试将 dll 搜索到临时/临时 ASP.NET 文件中。使用 %temp% 进入运行窗口进入 Temp。

将 dll 放入您的电脑后,只需添加对您项目的引用,它就会起作用。

于 2015-07-31T07:24:09.287 回答
0

重新发布该网站为我解决了这个问题。

于 2017-11-07T22:15:36.167 回答
0

面临同样的问题,不幸的是这里没有任何工作。最后,我遇到了这个链接:https ://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/

结果证明解决方案有点愚蠢:将 microsoft.web.infrastructure dll 的 copy-local 设置为 False,然后将其设置回 True。

顺便说一句,我认为正在发生的事情是 microsoft.web.infrastructure dll 有两个版本,一个预安装在 GAC 中,另一个现在是 nuget 包。我认为一个掩盖了另一个,因此引起了问题。在我的特殊情况下,在我的构建服务器上,我需要将其复制到一个文件夹中(然后将该文件夹压缩并发送到部署)。我猜系统在本地有一个副本,只是想“不,会没事的”

于 2017-11-21T17:26:29.777 回答
0

我有一个只有文件的网站。将 MVC 5 添加到 webforms 应用程序(针对 net45)。我不得不修改 packages.config

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45"

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" developmentDependency="true"

为了让它以调试模式在本地机器上启动(以前有上面描述的错误)。在 Windows 7 上运行 VS 2017 ...通过文件 > 打开 > 网站 > 文件打开(选择 IIS 之外的根目录)。

于 2018-01-24T18:01:45.657 回答
0

升级一堆 NuGet 包后我遇到了同样的问题。
我已经尝试过这里描述的各种删除、清理、重新安装,但无济于事。尽管 NuGet 管理器显示它已安装,但引用没有 Microsoft.Web.Infrastructure。

问题通过更换解决:

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

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

在 packages.config 中。罪魁祸首显然是“net45”。

于 2019-02-16T02:56:28.080 回答
0

有时需要强制删除软件包,然后重新安装它对我有用。尝试删除包

Uninstall-Package Microsoft.Web.Infrastructure -force

然后再次安装

Install-Package Microsoft.Web.Infrastructure
于 2022-01-10T21:43:55.513 回答