无法加载类型'System.Web.Mvc.ViewUserControl <sometype>'</sometype>

时间:2010-05-10 14:30:10

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

我正在尝试将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&lt; MyProj.Web.Models.RangeViewModel&gt;'。

但是当我在.cs文件类型中声明某个地方,如

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

并在&lt;%@ Control 标头中使用它。然后它可以正常工作。

我错过了什么吗?

更新

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

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

4 个答案:

答案 0 :(得分:14)

我发现视图引擎在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>

答案 1 :(得分:5)

无法找到原因,但以下帮助(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

答案 2 :(得分:1)

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

  1. 括号和类型名称之间所需的空格。
  2. 需要为您的模型类型建模。
  3. 这是我得到的

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

答案 3 :(得分:0)

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

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

同样重建解决方案可以帮助并检查web.config也可以。

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

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