命名空间'System.Web'中不存在类型或命名空间名称'Mvc'

时间:2010-04-22 15:09:24

标签: asp.net-mvc-2 hybrid

将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版没有安装或者没有被选中。

我试过创建一个文件&gt;新项目基于MVC 2,并且正在推出MVC的新(v2)版本。我还转换了一些其他项目(不是混合项目),并且它们没有问题转换为MVC2。

我还卸载了MVC1,试图从GAC中删除对它的引用。但是,这些都没有奏效。

有什么想法吗?

3 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分:2)

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

答案 2 :(得分: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元素。