C# MVC 2与VS 2010视图构建错误:功能';匿名类型';无法使用,因为它不是ISO-2 C语言规范的一部分

C# MVC 2与VS 2010视图构建错误:功能';匿名类型';无法使用,因为它不是ISO-2 C语言规范的一部分,c#,visual-studio,visual-studio-2010,asp.net-mvc-2,C#,Visual Studio,Visual Studio 2010,Asp.net Mvc 2,我有一个共享项目,其中存储了所有自定义EditTemplates和DisplayTemplates。这是一个常规的C#类库项目,所有视图都标记为嵌入式资源。本项目的目标框架是“.Net framework 4” 在/Views/文件夹中,我包含了这个web.config文件,因此在处理.aspx和.ascx文件时,我可以获得MVC 2 intellisense: <?xml version="1.0"?> <configuration> <system.web&

我有一个共享项目,其中存储了所有自定义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-2c语言的应用 规格

对于如下所示的模板:

<%@ 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语言规范”错误的一部分,我如何解决这个问题?

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

csc/langversion:ISO-2

完整文档:


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

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

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

  • 卸载项目
  • 编辑项目
  • 交换此项目的项目GUID

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


  • (这是一个MVC3项目)

    对我来说,这最终是由磁盘空间不足造成的,表现为异常和无法解释的随机构建错误的风暴。

    对此有任何解释或猜测吗?谢谢分享。你说得对,在删除app.config之后,它对我起了作用。但是,我也发现,如果我将
    system.web
    配置块从web.config复制到app.config,错误也会消失。因此,如果需要app.config,请尝试将配置从web.config复制到app.config,并保留web.config。在我的示例中,我打开了web.config,并从较旧版本的解决方案中查看。我将所有文件复制到另一个文件夹中,并在转换/重构/更新过程中将其用作参考。奇怪的是,仅仅打开这个文件就导致了一个问题。谢谢,也为我修复了它。我的是一个类库项目(VS2012,.NETFramework 4.5),在我为NopCommerce编写的插件中,使用了razor视图。