代码之家  ›  专栏  ›  技术社区  ›  John Farrell

MVC 2 with VS 2010视图生成错误:无法使用功能“匿名类型”,因为它不是ISO-2 C语言规范的一部分

  •  3
  • John Farrell  · 技术社区  · 16 年前

    我有一个共享项目,其中存储了所有自定义的EditTemplates和DisplayTemplates。这是一个常规的C#类库项目,所有视图都标记为嵌入式资源。本项目的目标框架是“.Net framework 4”。

    在/Views/文件夹中,我包含了这个web.config文件,因此在处理.aspx和.ascx文件时可以获得MVC 2 intellisense:

    <?xml version="1.0"?>
    <configuration>
      <system.web>
        <httpHandlers>
          <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
        </httpHandlers>
        <pages
            validateRequest="false"
            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">
          <controls>
            <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral,   PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
          </controls>
        </pages>
      </system.web>
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />  
        <handlers>
          <remove name="BlockViewHandler"/>
          <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"    type="System.Web.HttpNotFoundHandler" />
        </handlers>
      </system.webServer>
    </configuration>
    

    通常情况下,此设置没有问题,但编译视图时偶尔会出现错误:

    错误3功能“匿名类型” 不能使用,因为它不是 规范

    对于如下所示的模板:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    <%@ Import Namespace="System.Web.Mvc.Html" %>
    <%
        string displayText = string.Empty;
    
        if (Model != null)
        {
            if (DateTime.Parse(Model.ToString()) != DateTime.MinValue)
                displayText = DateTime.Parse(Model.ToString()).ToShortDateString();
        }
    %>
    
    <%= Html.TextBox("", displayText, new { @class = "date-box" })%>
    

    4 回复  |  直到 16 年前
        1
  •  4
  •   JaredPar    16 年前

    不知何故,您的IDE经验导致4.0C编译器仅限于2.0版编译器允许的功能。这可以使用langversion开关来完成。例如

    csc/L版本:ISO-2。。。

    http://msdn.microsoft.com/en-us/library/f4ckecs0.aspx

    我不熟悉Asp.NETMVC的编译工作原理,但在您的项目系统中,您要求仅限于2.0框架。我的第一个猜测是查看项目的项目页面,确保它不是针对2.0的。

        2
  •  6
  •   Vitali Tomashevich    14 年前

    我遇到过这个问题,花了很多时间,但我发现App.Config文件中的空配置部分是问题的根源。简单 删除App.Config ,一切正常。

        3
  •  2
  •   SimonGates    13 年前

    1. 卸载项目
    2. 编辑项目
    3. 项目类型GUID: {E53F8FEA-EAE0-44A6-8774-FFD645390401}{349c5851-65df-11da-9384-00065b846f21}{fae04ec0-301f-11d3-bf4b-00c04f79efbc}

        4
  •  0
  •   momo    11 年前

    对我来说,这最终是由磁盘空间不足造成的,表现为异常和莫名其妙的随机构建错误的冰雹。