如何修复"IIS错误的compilerVersion"?

56
我遇到了这个异常:

System.Configuration.ConfigurationErrorsException: 如果你正在编译.NET Framework 4.0或更高版本,则提供程序选项中的“compilerVersion”属性的值必须为“v4.0”或更高版本。

我该怎么做才能解决这个问题?
7个回答

67

我曾遇到类似的问题,需要通过修改 Web.config 文件来告诉 ASP.NET 使用 3.5 编译器。下面是从我的代码中复制粘贴出来的内容。你需要将 value="v3.5" 改为 value="v4.0"编译器类型字符串可能也会有所变化。

<configuration>

  <!--  ... other configuraiton stuff ... -->

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
        <providerOption name="CompilerVersion" value="v3.5"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
        <providerOption name="CompilerVersion" value="v3.5"/>
        <providerOption name="OptionInfer" value="true"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
    </compilers>
  </system.codedom>

</configuration>

在我的情况中,使用的是2.0编译器而不是3.5版本。我正在一个IIS 7 ASP.NET网站项目中工作。

您可以从以下内容获取更多信息:


1
4igi的答案是C# 4.0的答案。 - pauloya
1
作为“使用2.0而不是3.5”的附注:上面的解决方案在我的情况下也管用。但最终我找到了为什么会使用错误的编译器:我正在使用“Web部署项目”来编译Web应用程序,它似乎无法理解aspx / ascx文件中的“CodeFile =”(并且找不到任何“.cs”文件)。旧版名称“CodeBehind =”可行,上面的“web.config”Hack不再需要。*** MSVC2010,.NET 2.0与3.5 Code *** - Tobias81
看了John K的参考资料,大多数编译器元素选项都是可选的!所以,在同一个网站项目中,我遇到了C#和vb的类似问题。VB的东西没有工作,很可能是由于设置了错误的版本,但我们希望忽略所有这种警告类型的任何和所有构建,因此我添加了只有我想要的选项的编译器元素:nowarn。<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="1" compilerOptions="/nowarn:618,612,40000" /> - InquisitionX

30

这应该会有所帮助

<configuration>
<!--  -->
<system.codedom>
 <compilers>
  <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
    type="Microsoft.CSharp.CSharpCodeProvider,System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   <providerOption name="CompilerVersion" value="v4.0"/>
   <providerOption name="WarnAsError" value="false"/>
  </compiler>
 </compilers>
</system.codedom>
<!--  -->
</configuration>

27
在我的情况下,我想使用4.0来运行一个子应用程序,但父级应用程序仍需要使用2.0。在父Web.config中使用<location path="." inheritInChildApplications="false">标签将编译器信息包装起来即可解决问题。 父 Web.config:
<location path="." inheritInChildApplications="false">
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
        <providerOption name="CompilerVersion" value="v3.5" />
        <providerOption name="WarnAsError" value="false" />
      </compiler>
    </compilers>
  </system.codedom>

这个帮助了我的情况。在服务器上运行供应商MSI之前,我们没有遇到任何混合的.Net版本问题。 - Cris Valenzuela
1
不错...这解决了我的问题(ASP.NET 4站点是ASP.NET 2.0的子站点) - Alex Dn

9

从 web.config 文件中删除此部分。

<compilation debug="true" strict="true" explicit="true"  targetFramework="4.0" />

在我填完我的问题之前,我没有看到你回答了自己的问题 :) - John K
是的,但你的更完整。 - Jonathan Allen
2
还需要在4.5中删除<httpRuntime targetFramework="4.5" />。 - James
对我来说,在<compilation>中有一个嵌套的<assemblies>块。所以我只是删除了所有属性,最终得到了<compilation><assemblies>...</assemblies></compilation>。 - Dan Watkins
这帮了我很多,谢谢。我复制了一个3.5项目并改为4.0版本,但在我做了这件事之前无法使其正常工作。 - But I'm Not A Wrapper Class

1
在我的情况下,它是默认网站下的子网站,尽管默认网站设置为ASP.NET 4.0,但web.config文件设置为2.0和3.5。将web.config文件更改为使用4.0即可解决问题。
请参考此链接:ASP.NET 4 Breaking Changes

1
我们不小心将 Web.config 复制粘贴到了 C:\inetpub\wwwroot 目录下。这个不小心复制粘贴的 Web.config 配置与实际不符,导致了编译器版本错误。删除 Web.config 文件后,问题得以解决。

0
在我的情况下,我正在使用一个旧的Webform网站(V 2.0),需要追加一个新的应用程序,该应用程序是使用MVC4.0开发的。我曾经面对过相同的错误,在尝试了许多给定解决方案的排列组合后,我将父应用程序的整个web.comfig包装在以下标记中。
<location path="." inheritInChildApplications="false">
...... web config tags here........
</location> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接