【问题标题】:Error Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35错误 Microsoft.Web.Infrastructure,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = 31bf3856ad364e35
【发布时间】:2012-09-22 01:29:18
【问题描述】:

我有一个小型网络应用程序。在我的应用程序中添加了两个 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 方法)+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, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。该系统找不到指定的文件..] System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+11697760 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文)+141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4866485

【问题讨论】:

  • 从 nuget 包安装 Microsoft.Web.Infrastructure.dll,对我有用。

标签: asp.net


【解决方案1】:

似乎 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 将被部署。

【讨论】:

  • 谢谢,这解决了我的问题!我在我的 Webforms 应用程序中使用了 WebApi 控制器,但由于提到的错误消息,部署失败。通过添加对我的项目的引用并复制 .dll,我能够使其工作。
  • 最初我尝试通过“管理此解决方案的 NuGet 包”界面,但它只是说 Microsoft.Web.Infrastructure.dll 已经安装,即使我看不到对它在任何地方。通过运行您的命令行,我能够在顶部安装,查看参考,设置为复制本地,重新部署...修复。谢谢!!
  • 我安装了包管理器,但它已经安装了。但我看不到该项目的参考资料。所以我自己添加并将 Copy Local 设置为 True =)
  • 请注意,在某些情况下,您会收到消息“Webapp 已经引用了 'Microsoft.Web.Infrastructure 1.0.0.0'。”。在这些情况下使用“Update-Package Microsoft.Web.Infrastructure -Reinstall”。
  • 我已经安装了它,但“复制本地”设置为 false。将其更改为 true 修复了它!谢谢
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这个对我有用,因为我的问题在服务器上,但不在我的机器上。
    【解决方案4】:

    我遇到了同样的问题,“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

    【讨论】:

      【解决方案5】:

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

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

      将 dll 导入您的电脑后,只需添加对您项目的引用即可。

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 钱。由于这个答案太新了,而且接受的(对我也不起作用)太旧了,我认为这与 Visual Studio 的更新版本有关。谢谢!
        • 正如 Robba 在对不同答案的评论中所说,您可以通过以下方式解决它不在参考列表中(但已安装包)的问题:“Update-Package Microsoft.Web.Infrastructure -重新安装”。我认为这比浏览程序集要好。
        【解决方案7】:

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

        PM> Install-Package Microsoft.Web.Infrastructure
        

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

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

        它对我有用。

        【讨论】:

        • Uninstall-Package Microsoft.Web.Infrastructure(如果使用 Team Foundation Server,则检查任何更改)然后 Install-Package Microsoft.Web.Infrastructure 为我工作。
        • 有时破解是让微软产品工作的唯一方法
        • 这对我也有用。是的,这是一个 hack,但它节省了很多时间。它如何从 bin 中自动删除是个谜
        【解决方案8】:

        为什么不手动将 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/

        【讨论】:

          【解决方案9】:

          Update-Package -reinstall Microsoft.Web.Infrastructure 对我不起作用,因为我一直收到错误提示它已安装。

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

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

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

          【讨论】:

          • 在我的情况下不起作用。我从包中删除基础设施文件夹并再次安装包
          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            面临同样的问题,不幸的是这里没有任何工作。最后,我发现了这个链接: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 包。我认为一个掩盖了另一个,因此引起了问题。在我的特定情况下,在我的构建服务器上,我需要将其复制到一个文件夹中(然后将该文件夹压缩并发送到部署)。我猜系统在本地有一个副本,只是想“不,会没事的”

            【讨论】:

              【解决方案12】:

              我有一个只有文件的网站。将 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 之外的根目录)。

              【讨论】:

                【解决方案13】:

                升级一堆 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”。

                【讨论】:

                  【解决方案14】:

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

                  Uninstall-Package Microsoft.Web.Infrastructure -force
                  

                  然后重新安装

                  Install-Package Microsoft.Web.Infrastructure
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-02-15
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-07-07
                    • 2014-02-09
                    • 2020-03-08
                    • 2014-12-19
                    相关资源
                    最近更新 更多