9

将 Hybrid ASP.NET MVC1 应用程序转换为 MVC2 后,当我尝试运行应用程序时出现以下错误:

命名空间“System.Web”中不存在类型或命名空间名称“Mvc”(您是否缺少程序集引用?)

web.config 文件中的罪魁祸首是 System.Web.Mvc:

<namespaces>
    <add namespace="System.Web.Mvc"/>
    <add namespace="System.Web.Mvc.Ajax"/>
    <add namespace="System.Web.Mvc.Html"/>

到目前为止,我的调查似乎使我相信 System.Web.Mvc 的第 2 版没有安装或没有被拾取。

我已经尝试创建一个基于 MVC 2 的文件 > 新项目,这就是 MVC 的新 (v2) 版本。我还转换了一些其他项目(不是混合项目),并且它们已经毫无问题地转换为 MVC2。

我还卸载了 MVC1 以尝试从 GAC 中删除对它的引用。然而,这些都没有奏效。

有任何想法吗?

4

3 回答 3

9

确保您的 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" newVersion="2.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Web.Mvc" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

即使机器上有 MVC 1,这也会强制 MVC 2。

另外:MVC 1 确实有一个System.Web.Mvc命名空间,所以请确保你也有:

  <assemblies>
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
于 2010-04-22T15:16:54.787 回答
2

我遇到了类似的事情,解决方案是更改对 Microsoft.Web.Mvc 的引用,因此 Copy Local 设置为 True。

于 2013-05-17T07:31:17.273 回答
1

我遇到了同样的错误,单击页面中的详细编译错误链接显示System.Web.Helpers,.Http,.WebPages.

备份系统后,我运行update-package -reinstall' 并强制卸载/重新安装所有软件包。这会强制正确重建 web.config 文件,并且正确dependentAssembly构建这些部分。

重建解决方案后,它第一次运行。

providers请注意,它确实在 web.config中添加了以下错误部分。

<contexts>
  <context type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</contexts>
<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

这只会产生一个构建警告,但我确实删除了它以支持前面的contexts元素。

于 2014-04-16T11:56:53.607 回答