【问题标题】:MVC 2 with VS 2010 View Building Error: Feature 'anonymous types' cannot be used because it is not part of the ISO-2 C# language specification带有 VS 2010 视图构建错误的 MVC 2:无法使用功能“匿名类型”,因为它不是 ISO-2 C# 语言规范的一部分
【发布时间】:2010-04-01 13:47:13
【问题描述】:

我有一个共享项目,其中存储了我的所有自定义 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 特征“匿名类型” 不能使用,因为它不是一部分 ISO-2 C# 语言的 规格

对于一个看起来像这样的模板:

<%@ 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" })%>

大多数时候这个错误会消失。我已经学会了处理它,但现在它引起了一些问题。知道是什么原因导致“错误 3 功能‘匿名类型’无法使用,因为它不是 ISO-2 C# 语言规范的一部分”错误,以及如何解决这个问题?

【问题讨论】:

    标签: c# visual-studio visual-studio-2010 asp.net-mvc-2


    【解决方案1】:

    我遇到过这个问题,并且花了很多时间,同时发现其中包含空配置部分的 App.Config 文件是万恶之源。只需删除 App.Config,一切都会正常工作。

    【讨论】:

    • 对此有何解释或猜测?
    • 感谢您分享此内容。没错,删除 app.config 后,它对我有用。但是,我也发现如果我将 system.web 配置块从 web.config 复制到 app.config,错误也消失了。因此,如果您需要 app.config,请尝试将配置从您的 web.config 复制到 app.config,并保留 web.config。
    【解决方案2】:

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

    csc /langversion:ISO-2 ...

    完整文档:http://msdn.microsoft.com/en-us/library/f4ckecs0.aspx

    我不熟悉 Asp.Net MVC 的编译工作原理,但在您的项目系统的某个地方,您要求将其限制为 2.0 框架。我的第一个猜测是查看项目的项目页面并确保它不是针对 2.0。

    【讨论】:

    • 在我的情况下,我打开并查看了旧版本的解决方案。我复制了不同文件夹中的所有文件,并在我的转换/重构/更新过程中将其用作参考。奇怪的是,仅仅打开这个文件就会导致问题。
    【解决方案3】:

    我的解决方案是更改项目类型

    1. 卸载项目
    2. 编辑项目
    3. 为此交换项目 GUID

      ProjectTypeGuids: {E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}

    (这是一个 MVC3 项目)

    【讨论】:

    • 谢谢,也帮我修好了。我的是一个类库项目(VS2012,.NET Framework 4.5),在我为 NopCommerce 编写的插件中,它使用了剃刀视图。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2012-07-09
      • 2023-03-26
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多