【问题标题】:Could not load file or assembly 'System.Web.Mvc'无法加载文件或程序集“System.Web.Mvc”
【发布时间】:2010-09-20 23:42:18
【问题描述】:

我的新 ASP.NET MVC Web 应用程序可以在我的开发工作站上运行,但不能在我的 Web 服务器上运行...


“/”应用程序中的服务器错误。


配置错误

说明:处理此请求所需的配置文件时出错。请查看下面的具体错误详细信息并适当地修改您的配置文件。

解析器错误消息: 无法加载文件或程序集 'System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。该系统找不到指定的文件。

来源错误:

Line 44:         <add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Line 45:         <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Line 46:         <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Line 47:         <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
Line 48:         <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

源文件: C:\inetpub\www.example.org\web.config 行: 46

程序集加载跟踪:以下信息有助于确定程序集“System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”的原因.

警告:程序集绑定日志记录已关闭。 要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。 注意:有一些与程序集绑定失败日志相关的性能损失。 要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

版本信息: Microsoft .NET Framework 版本:2.0.50727.3053; ASP.NET 版本:2.0.50727.3053


我需要在服务器上安装 AspNetMVCBeta-setup.msi 吗?还是有不同的服务器安装程序?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我刚刚写了一篇博客文章来解决这个问题。你可以在你的服务器上安装 ASP.NET MVC 或者你可以关注steps here


    编辑:(by jcolebrand)我浏览了这个链接,然后遇到了与Victor below 相同的问题,所以我建议您也添加这些:

    * Microsoft.Web.Infrastructure
    * System.Web.Razor
    * System.Web.WebPages.Deployment
    * System.Web.WebPages.Razor
    

    【讨论】:

    • 注意:当您安装了 MVC4(目前是测试版)时,您需要获取这些 DLL 的 v1.0,您还需要获取 System.Web.Helpers(至少我需要到)。
    • -1 您链接到的帖子未说明如何通过发布机制将 Microsoft.Web.Infrastructure 获取到 Web 服务器。必须直接在服务器上安装东西,有点麻烦。
    • 使用 Visual Studio 2010,这变得容易多了,如下所述:britishdeveloper.co.uk/2011/06/…
    • 如果您不使用 Web Deploy,请点击此处britishdeveloper.co.uk/2011/05/…
    • 我不得不清理 bin 文件夹,然后再次发布,也就是说,如果你没有使用部署包。
    【解决方案2】:

    我遇到了与 sgriffinusa 相同的问题。 除了 Phil 的文章建议的参考资料:http://www.haacked.com/archive/2008/11/03/bin-deploy-aspnetmvc.aspx。我添加了这些:

    * Microsoft.Web.Infrastructure
    * System.Web.Razor
    * System.Web.WebPages.Deployment
    * System.Web.WebPages.Razor
    

    Godaddy 部署工作完美。关闭自定义错误并添加参考以更正错误。这应该会引导您朝着正确的方向前进。

    【讨论】:

      【解决方案3】:

      直接在您的 Web 服务器上安装 MVC 是一种选择,因为这样程序集将安装在 GAC 中。您还可以对程序集进行 bin 部署,这可能有助于在最终版本可用之前让您的服务器远离预发布程序集。

      Phil Haack 几天前发表了一篇不错的文章,介绍了如何将 MVC 与您的应用程序一起部署,因此无需直接安装:

      http://www.haacked.com/archive/2008/11/03/bin-deploy-aspnetmvc.aspx

      【讨论】:

        【解决方案4】:

        我在尝试在 GoDaddy 共享主机上部署我的 MVC3 Razor Web 应用程序时遇到了同样的问题。还有一些额外的 .dll 需要被引用。详情在这里:http://paulmason.biz/?p=108

        除了@Haacked 的帖子中列出的内容之外,您基本上还需要添加对以下内容的引用,并将它们设置为按照描述在本地部署。

        • Microsoft.Web.Infrastructure
        • System.Web.Razor
        • System.Web.WebPages.Deployment
        • System.Web.WebPages.Razor

        【讨论】:

        • 谢谢,在手动添加引用然后在本地部署它们后,它确实解决了 MVC3 的问题!
        • 这里也一样。添加这些额外 DLL 的良好指导。谢谢!
        • 这里也一样。不是在 GoDaddy 上,而是在我公司的服务器上,所以这一定是一个普通的案例。
        【解决方案5】:

        在 VS2010 中,右键单击解决方案资源管理器中的项目并选择“添加可部署依赖项”。然后在下面的对话框中勾选 MVC 相关的复选框。

        这会在项目中创建一个“_bin_deployableAssemblies”文件夹,其中包含其他答案中提到的所有 .dll 文件。我相信这些会在创建部署包时被复制到 bin 文件夹中。

        【讨论】:

          【解决方案6】:

          快速简单的解决方案:我在使用 Microsoft.AspNet.Mvc -Version 5.2.3 时遇到了这个问题,经过所有这些线程后,我找到了一个最简单的解决方案。

          只需按照以下步骤操作:

          1. 在 Visual Studio 中为您的项目打开 NuGet 包管理器
          2. 搜索 Microsoft.AspNet.Mvc
          3. 找到后,将操作更改为卸载并卸载它
          4. 完成后,重新安装并立即尝试

          这将自动修复所有引用问题。 见下图:

          【讨论】:

            【解决方案7】:

            简单的修复。在VS2010中,右键单击你的MVC项目,选择“Add Deployable Dependencies...”,选择你想要的选项并点击ok

            【讨论】:

              【解决方案8】:

              遇到同样的问题并添加了他们所说的所有程序集,但仍然出现同样的错误。

              事实证明,您需要将“特定版本”设为 False。

              【讨论】:

              • 或者,如果未启用,您应该将“复制本地”切换为“真”,
              【解决方案9】:

              我们想要添加它,因为我们正在制作一个使用它的类库。

              对我来说它就在这里......

              C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies

              【讨论】:

                【解决方案10】:

                如果您不使用托管服务提供商,并且您可以访问要安装的服务器...然后安装 MVC 3 更新工具,请执行此操作...它将为您节省数小时在 Windows 2003 服务器/IIS6 上的问题机器。 ,我在这里评论了这个页面Nuget.Core.dll version number mismatch

                【讨论】:

                  【解决方案11】:

                  除了 Haack 的帖子,Hanselman 也有类似的帖子。 BIN Delploying ASP.NET MVC 3 with Razor to a Windows Server without MVC installed

                  对我来说,“复制本地 = true”解决方案是不够的,因为我的网站的项目引用不包括所有丢失的 dll。正如 Scott 在他的帖子中提到的,我还需要从我的开发框上的以下文件夹中获取额外的 dll:C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies。错误消息告诉我缺少哪个 dll(System.Web.Infrastructure、System.Web.Razor 等)。我继续逐个添加每个缺少的 dll,直到它起作用。

                  【讨论】:

                    【解决方案12】:

                    我已经在 Visual Studio 2015 中执行了“更新包 - 重新安装 Microsoft.AspNet.Mvc”来修复它。

                    【讨论】:

                      【解决方案13】:

                      一个重要的考虑因素是 web.config 文件,一些包可能会破坏您的绑定重定向,从而造成严重破坏(流氓包是内部包,我没有从包中删除 web.config 或确保 web.config 在包中没有任何绑定重定向。例如,通过删除重复和不正确的节点来解决此问题

                          <runtime>
                              <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                                  <dependentAssembly>
                                      <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                      
                      
                                      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
                                      <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
                                      <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0"/>
                                      <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0"/>
                                      <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930"/>
                                      <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2"/>
                      
                      
                                      <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
                                      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
                                      <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="SimpleInjector" publicKeyToken="984cb50dea722e99" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.3.2.0" newVersion="3.3.2.0"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2"/>
                                  </dependentAssembly>
                                  <dependentAssembly>
                                      <assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral"/>
                                      <bindingRedirect oldVersion="0.0.0.0-1.4.9.5" newVersion="1.4.9.5"/>
                                  </dependentAssembly>
                              </assemblyBinding>
                          </runtime>
                      

                      通过删除第 8 到 24 行来修复构建。

                      【讨论】:

                        【解决方案14】:

                        还要检查 Views 文件夹 中 web.config 中的程序集版本,并确保它匹配。我有时会忘记该位置有第二个 web.config。

                        【讨论】:

                          【解决方案15】:

                          将项目转移到另一个解决方案后,我在一堆汇编文件中遇到了同样的问题。

                          对我来说,web.config 文件试图添加这个程序集:

                          <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                          

                          认为项目中的引用指向版本3.0.0.0(单击引用并滚动到属性的底部)。因此,我只是更改了web.config 文件中的参考版本。

                          我不知道这是否只是某种错误。添加所有其他引用的问题是这些引用出现在配置文件中,但在项目中(在解决方案资源管理器中)实际上根本没有引用它,并且所需的文件没有与其余的项目文件一起复制,可能是因为不是"copy local = true"

                          现在,我无法在可添加程序集中找到这些程序集(通过右键单击引用并尝试从程序集或扩展中添加它们)。相反,我创建了一个新的 MVC 解决方案,它添加了我需要的所有程序集和引用,并在解决方案资源管理器的新项目引用下找到它们,并在属性窗口中找到它们的路径以供参考。

                          然后我只是将我需要的库复制到另一个项目中并引用它们。

                          【讨论】:

                            【解决方案16】:

                            在尝试了一切但仍然失败之后,这是我的解决方案: 我记得我上次在我的 Visual Studio 中更新 MVC 版本时出错,所以我从另一台 Visual Studio(不同的计算机)运行项目,然后上传了 dll-s 并且它工作正常。 也许它会帮助某人......

                            【讨论】:

                              【解决方案17】:

                              我在 .net 项目中使用 Jenkins,但在使用 MVC 4 引用时遇到了麻烦。

                              我终于通过使用基于注册表的 .Net 参考搜索引擎功能解决了我的问题:

                              “HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft.NETFramework\v2.0.50727\AssemblyFoldersEx”

                              例如,您可以创建子键并将默认键设置为“c:\myreferenceedir”。

                              它用 MVC 版本和 ASP.net 网页拯救了我。

                              添加对“添​​加引用对话框”的引用很有用

                              http://dhakshinamoorthy.wordpress.com/2011/12/04/how-to-register-your-net-assembly-in-gac-and-make-it-show-in-add-reference-dialog/

                              【讨论】:

                                【解决方案18】:

                                正如其他人所提到的,将这些引用添加到视觉工作室,并将 Copy Local 设置为 true。 (我还得加System.Web.Webpages

                                Microsoft.Web.Infrastructure
                                System.Web.Razor
                                System.Web.WebPages.Deployment
                                System.Web.WebPages.Razor
                                System.Web.Webpages
                                

                                【讨论】:

                                  【解决方案19】:

                                  我使用管理 NuGet 包添加了“Microsoft ASP.NET Razor”。

                                  由于某种原因,使用添加引用,我只有 System.Web.Helpers 1.0.0 和 2.0.0...,但没有 3.0.0。

                                  另一个对我有用的选项是删除对 System.Web.Mvc 和 System.Web.Http... 的引用,然后将它们重新添加到 csproj 文件中的包位置(您可以最轻松地编辑带有文本编辑器的项目):

                                  <Reference Include="System.Web.Http">
                                    <HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
                                  
                                  <Reference Include="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
                                    <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath>
                                  

                                  【讨论】:

                                    猜你喜欢
                                    • 2012-02-12
                                    • 2013-01-19
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2023-03-27
                                    • 2013-05-23
                                    相关资源
                                    最近更新 更多