BC30561:'Html'不明确,从命名空间或类型'System.Web.WebPages,System.Web.Mvc'导入

时间:2014-09-25 11:10:05

标签: asp.net asp.net-mvc asp.net-mvc-5.2

我将MVC应用程序从MVC 3升级到5.2.2,现在我收到了这个错误。我使用新的项目向导创建了一个全新的MVC项目,这很有效,我在两个项目中比较了我的/web.configViews/web.config文件,但没有看到任何看似重要的差异

在对象浏览器中查看,我发现HtmlHelperSystem.Web.WebPages中定义了两个不同的System.Web.Mvc对象,这似乎是相关的:

enter image description here

但我不确定如何处理这个事实。

2 个答案:

答案 0 :(得分:6)

经过几个小时的摔跤,然后在这里发布问题,我一分钟后想出来了;我已经指定了一个强类型模型:

@ModelType IEnumerable(Of MyModel)

但是,在我升级到5.2.2的同一时间,我重新组织了我的命名空间,以便MyModel位于不同的命名空间中,这导致了问题。解决方法是将其更改为:

@ModelType IEnumerable(Of NewNamespace.MyModel)

如果编译器发现了这一点会很好。我永远不会想到它根本找不到我的模型对象类型 ,但不会这么说。

答案 1 :(得分:0)

确保您的model points to a real class,但这可能是因为MvcWebPageRazorHost isn't registereddifferent versions are registered in the root web.config vs. the views web.config,通常是由updating MVC versions

引起的

每次打开Razor View时,我都会遇到几个编译器错误:

Type 'System.Web.Mvc.WebViewPage' is not defined.
'Context' is not declared. It may be inaccessible due to its protection level.
sub 'Execute' cannot be declared 'Overrides' because it does not override a sub in a base class.
'Html' is ambiguous, imported from the namespaces or types 'System.Web.WebPages, System.Web.Mvc'.

修复了更新web.config中的webpages:Version的问题:

来自此

<add key="webpages:Version" value="2.0.0.0" />
<dependentAssembly>
  <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

至此

<add key="webpages:Version" value="3.0.0.0" />
<dependentAssembly>
  <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="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>