【问题标题】:Ambiguous between system.web.mvc.dll and solution_name.dll when using master page on a razor view在剃刀视图上使用母版页时 system.web.mvc.dll 和 solution_name.dll 之间存在歧义
【发布时间】:2014-09-28 15:10:20
【问题描述】:

我一直在尝试实施this 解决方案,以拥有一个使用asp 母版页的剃须刀视图页面。我遇到的问题是母版页不能继承MVC ViewMasterPage:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="System.Web.Mvc.ViewMasterPage" %>

解析器错误消息:“System.Web.Mvc.ViewMasterPage”类型不明确:它可能来自程序集“C:\Projects\OpenDataPortal\OpenDataPortal\bin\System.Web.Mvc.DLL”或程序集“ C:\Projects\OpenDataPortal\OpenDataPortal\bin\OpenDataPortal.DLL'。请在类型名称中明确指定程序集。

我使用 .NET Reflector 检查了这个 ViewMasterPage 并确定它包含 Razor 页面上使用的所有 Html 帮助程序等。因此,这应该允许我在使用此母版页的 RazorView.aspx 页面上执行以下操作,就像在解决方案中一样(Html 帮助程序和 ViewBag):

<% Html.RenderPartial((string) ViewBag._ViewName); %>

我还确定 web.config 中的 MVC 程序集应该没有问题:

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

我也不确定母版页和/或 RazorView.aspx 页面的代码隐藏和/或设计器是否会导致任何问题。

【问题讨论】:

    标签: c# asp.net asp.net-mvc razor master-pages


    【解决方案1】:

    似乎其他 DLL 还包含来自 System.Web.Mvc 命名空间的类型(很可能他们在发布程序集时执行了 ILMerge,但不知道为什么)。因此,您需要通过在 Inherits 中提供完整的程序集名称来消除歧义:

    Inherits="System.Web.Mvc.ViewMasterPage, System.Web.Mvc, version=5.2.2.0, culture=neutral, publickeytoken=31bf3856ad364e35"
    

    【讨论】:

      【解决方案2】:

      实际上,您使用的是 aspx 而不是实际的 MVC 母版页,它有一个代码,例如,如果我的母版页是 site.master,我会转到它后面的代码(my case its .vb) 并添加

      Public Class SiteMaster
          Inherits System.Web.Mvc.ViewMasterPage
      

      现在,您可以将母版页类继承为

      <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Project.SiteMaster" %> 
      

      【讨论】:

      • 这有什么帮助?您刚刚将错误从一个位置移到了另一个位置。
      猜你喜欢
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多