C# 编译器版本与.NET Framework版本-使用ASP.NET应用程序的场景

C# 编译器版本与.NET Framework版本-使用ASP.NET应用程序的场景,c#,.net,asp.net,clr,compilation,C#,.net,Asp.net,Clr,Compilation,情景: 我的客户机上有VS2010(C#4编译器),目标是3.5 我正在开发ASP.NET应用程序。我在一个类文件中使用可选参数(支持C#4)并编译代码,看起来一切正常 稍后,在运行时发现一个问题,旧的(我相信是经典的)ASPX正在使用该函数。没有函数只接受x参数,其中x比可选参数小一个,即运行时错误 这是否意味着普通类等使用客户端的C#编译器,而视图(aspx)等使用服务器上的编译器?如果在视图/表单文件中使用C#4,则会导致问题?我认为这与以下事实有关:第一次加载时,IIS会(重新?)编译a

情景:

我的客户机上有VS2010(C#4编译器),目标是3.5

我正在开发ASP.NET应用程序。我在一个类文件中使用可选参数(支持C#4)并编译代码,看起来一切正常

稍后,在运行时发现一个问题,旧的(我相信是经典的)ASPX正在使用该函数。没有函数只接受x参数,其中x比可选参数小一个,即运行时错误


这是否意味着普通类等使用客户端的C#编译器,而视图(aspx)等使用服务器上的编译器?如果在视图/表单文件中使用C#4,则会导致问题?

我认为这与以下事实有关:第一次加载时,IIS会(重新?)编译aspx页面,而不是在Visual Studio中编译。这允许它们在不重新编译的情况下动态更新,但是由于它们是由IIS编译的,因此会带来您所看到的复杂性

我不知道有什么方法可以让IIS使用C#4编译器,但可以编译到.NET 3.5,因此您的唯一选择似乎是:

  • 更新至.NET4
  • 不要使用可选参数
  • 不要调用在.aspx文件中使用可选参数的代码。我猜如果你把调用移到codebehind文件,它应该可以正常工作,但我还没有尝试过

  • 该函数是从.aspx文件内部调用的,还是从该文件的codebehind内部调用的?@Adam我很清楚,只要使用C#4.0编译器,您可以在针对.NET 3.5时使用可选参数。我想说的一点是,虽然你可以在Visual Studio中这样做,但我不知道有什么方法可以让IIS在.NET 3.5动态重新编译.aspx页面时使用C#4编译器。