【问题标题】:Could not load type 'System.Web.Mvc.ViewUserControl<SOMETYPE>'无法加载类型“System.Web.Mvc.ViewUserControl<SOMETYPE>”
【发布时间】:2010-05-10 14:30:09
【问题描述】:

我正在尝试将 ASP.NET MVC 2 项目 (VS2010) 部署到 Win Server 2008 R2

它在开发机器上完美运行。但是在 Server 2008 R2 出现了奇怪的错误: 当 .ascx 文件具有使用泛型类型的标头时:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>" %>

服务器报告无法加载类型“System.Web.Mvc.ViewUserControl”。

但是当我在 .cs 文件类型中的某处声明时

public class AA : System.Web.Mvc.ViewUserControl<MyProj.Web.Models.RangeViewModel>
{
}

并在 标头中使用它。然后它就可以正常工作了。

我错过了什么吗?

更新

我分两步部署应用程序(在服务器上):

  1. 使用命令行 MSBuild(适用于 .NET 4)从源代码重建 VS 解决方案
  2. 启动执行两个目标的自定义 msbuild 任务(为此具有 publih.msbuild 文件):Targets="ResolveReferences;_CopyWebApplication"

【问题讨论】:

  • 你试过Inherits="System.Web.Mvc.ViewUserControl1[[MyProj.Web.Models.RangeViewModel]]"`?
  • 您为什么不直接在 Visual Studio(或 Express,如果您正在使用它)中构建?您也可以尝试一下,如果它在 VS 构建中工作,则将其精确定位到 msbuild 配置。

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


【解决方案1】:

我看起来视图引擎在 Inherit 属性中编译强类型基类时出现问题。我遇到了同样的问题,将 Web.Config 的“页面”部分更新为此有帮助:

 <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
          <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
        </controls>
        <!-- rest of your pages section -->
</pages>

【讨论】:

  • 哦,是的 - 对于 MVC2,它应该是“Versions=2.0.0.0”。理论上——如果 MVC 项目正确构建并发布,则不需要对“页面”部分进行调整。在实践中,当在不同版本和 MVC 构建之间迁移时,修复项目是最简单的方法
  • 类似地 - 如果您部署了一个新的“区域”并且忘记复制该区域的 web.config,您可能会看到此错误。刚刚发生在我身上。
【解决方案2】:

找不到原因,但以下帮助(web.config):

<pages
         pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
         pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
         userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

最初发现 asp.net mvc 1 类似

【讨论】:

  • 您的项目或其构建有问题,因为在 web.config 中不需要 ASP.NET MVC 应用程序在本地或服务器上工作。
  • @mare 你在一方面是对的,它不应该是必需的,但在一个实例中,如果不添加所描述的 pages 标签,我们将无法执行应用程序。很想知道真正的问题,mayby machine.config 正在做些什么?
【解决方案3】:

我有类似的问题。有几个重点

  1. 括号和类型名称之间需要空格。
  2. 需要适合您的模型类型的模型。

这就是我得到的

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl <MyNamespace.MyModel>" %>
<%@ Import Namespace="MyNamespace" %>
<% var model = (MyModel)Model; %>

<h1><% model.MyField %></h1>

【讨论】:

    【解决方案4】:

    服务器上的 ASP.NET MVC 安装可能会搞砸。我建议卸载 MVC 并使用 Web Platform Installer 重新安装。我在使用下载的设置文件安装时也遇到了问题,因此我删除了所有内容并使用了 Web 平台安装程序。

    另一个建议是制作一个全新的服务器盒 - 可以是虚拟的 - 并在那里尝试。

    还可以重建解决方案并检查 web.config 是否也可以。

    如果 MvcDiagnostics.aspx 工具显示任何异常,也请尝试。查看this 博文

    如果有任何帮助,请告诉我们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2012-08-14
      • 2015-08-28
      • 2016-03-05
      • 2014-08-09
      相关资源
      最近更新 更多