【问题标题】:Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0' or one of its dependencies无法加载文件或程序集“System.Web.Mvc,Version=3.0.0.0”或其依赖项之一
【发布时间】:2014-07-24 13:56:06
【问题描述】:

我在包管理器控制台中使用以下命令在 MVC 项目中添加 Ninject:

Install-Package Ninject -version 3.0.1.10
Install-Package Ninject.Web.Common -version 3.0.0.7
Install-Package Ninject.MVC3 -Version 3.0.0.6

当我运行应用程序时,我收到如下错误:

无法加载文件或程序集'System.Web.Mvc,版本=3.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

【问题讨论】:

  • 你有什么版本的 System.Web.Mvc?
  • 你为什么要安装这么旧的版本?只需安装 Ninject.MVC3 .. 最新版本.. 它会拉入您需要的依赖项。
  • Alexei,我不知道如何检查它的版本。我认为我正在使用 Version=3.0.0.0
  • Simon,由于我是 MVC 新手,所以我尝试遵循一些使用旧版本的教程。但是我尝试使用最新版本,输出仍然相同
  • 在资源管理器中打开“bin”文件夹并右键单击那里的 System.Web.Mvc - 详细信息选项卡将显示版本。您可能需要“程序集重定向”将旧版本映射到新版本(或其他方式)。

标签: c# asp.net-mvc ninject


【解决方案1】:

更新应用程序 web.config 文件

确保在应用程序 web.config 文件中进行这些更改,而不是在 Views 文件夹中的 web.config 文件中。

 <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
             <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
             <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
         </dependentAssembly>
      </assemblyBinding>
 </runtime>

【讨论】:

  • 不知何故我遇到了这个问题。我一定是更新了 MVC NuGet 包并得到了不匹配的版本。
  • 没有被标记为答案,所以我不知道这是否回答了 Dani 的问题 - 但回答了我的问题:) 谢谢
【解决方案2】:

如果您关注Pro ASP.NET MVC 5,请按照以下步骤解决问题:

  1. 在 VS 的项目树中,右键单击 References 并转到 Manage NuGet Packages
  2. 转到Onlinenuget.org 并搜索ninject。
  3. 安装NinjectNinject.Web.CommonNinject.MVC5(书上说要安装MVC3)。
  4. Manage NuGet Packages 菜单中(从第 1 步开始),转到 Updatesnuget.org
  5. 更新所有模块,尤其是Microsoft ASP.NET MVC

【讨论】:

    【解决方案3】:

    我有一个使用 Ninject 的 Microsoft ASP.NET Web API 2.2 项目。

    要解决此问题,我必须为我的项目安装 NuGet 包 Microsoft ASP.NET MVC 4,因为 Ninject 需要 System.Web.Mvc。通过这样做,Visual Studio 会将System.Web.Mvc 添加到项目的引用中。

    另外,您应该将System.Web.Mvc 引用的属性设置为Copy Local = True,这样DLL 将被复制到Bin 文件夹。 DLL 不附带标准的 .NET Framework。它是 ASP.NET MVC 包的一部分。

    【讨论】:

      【解决方案4】:

      我扩展了引用,当我将鼠标悬停在 System.Web.Mvc 上时,我观察到它的版本是 4.0.0.1。它的路径奇怪的是 C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies。我的 packages.config 显示对应的 nuget 包是 Microsoft.AspNet.Mvc.5.2.3。引用似乎是错误的。所以从项目中删除了引用。然后使用以下命令卸载 nuget 包。

      uninstall-package Microsoft.AspNet.Mvc -force

      注意命令中的 force。

      然后我通过以下命令重新安装了它

      install-package Microsoft.AspNet.Mvc -version 5.2.3.0

      现在我确保引用的 dll 正确指向 nuget one

      D:\Vivek\Code1\Sept17\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll

      现在,当我运行时,我发现 System.Web.Webpages.Razor(Microsoft.AspNet.WebPages nuget) 和 System.Web.Razor(Microsoft.AspNet.Razor nuget) 存在类似问题。所以我也删除了这些并重新安装了相应的 nuget 包。

      然后终于成功了。

      【讨论】:

        【解决方案5】:

        如果amighty's Answer 没有与你合作,试试这个

        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
        </dependentAssembly>
        

        这个解决方案是在长时间与这个错误作斗争后出现的

        【讨论】:

        • 我遇到了错误,必须将 newVersion 更改为 5.0.0.0 才能使其正常工作。然后几个月后,在第 100 次重建之后,它在开发过程中突然停止工作。这次我不得不改回5.2.3.0
        【解决方案6】:

        我的应用程序遇到了这个问题。

        在我的解决方案中,我们有一个 web 应用程序项目和一个 web-api 项目。 Web 应用程序正在使用 web-api。

        我的问题的解决方法是 Web 应用程序中的 Mvc dll 版本与 web-api 项目中的不同。因此,每当我尝试访问 web-api 时,它都会抛出错误。我只是确保两个项目都具有相同的 Mvc dll 版本,并且一切正常。您可以为此使用 NuGet 包管理器。

        仅提一下,以供可能面临类似情况的其他人参考。

        【讨论】:

          【解决方案7】:

          在我的情况下,缺少的程序集已作为对项目的引用包含在内。我通过选择它然后将其“复制本地”属性设置为True来解决。我使用 Visual Studio 中的 web-deploy 将我的项目“发布”到 IIS。这次程序集被复制到网站的 \bin 文件夹中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-02
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多