ashx处理程序使用较旧的C#编译器

时间:2017-01-19 22:15:12

标签: asp.net ashx

我有一个旧解决方案,它已经升级到C#6,我们已经在大部分代码中使用它了。由于它的年龄,它有各种各样的项目类型,从老派asp.net一直到web api 2.然而,由于某些原因,传统asp.net项目中的ashx文件仍然以C#5为目标,所以我们不能在那里使用一些较新的语言功能(请注意,C#代码是在ashx文件中内联定义的,没有单独的ashx.cs文件)。如何升级ashx文件的编译器?跟进问题 - 我如何让它继承其余解决方案使用的编译器版本?

1 个答案:

答案 0 :(得分:2)

首先,要知道标记中包含的代码(如.aspx或.ashx)的编译方式与代码隐藏的编译方式不同。你的代码隐藏被编译成一个DLL,它被部署到你的bin文件夹中。同时,除非您麻烦地预编译.ashx和.aspx文件,否则它们会在即时基础上进行编译。您实际上可以直接在Web服务器上修改标记,更改将触发重新编译。

其次,请记住.ashx编译已发生巨大变化。过去,它的编译由<BuildProviders> element控制,<Compilers> element通常配置System.Web.Compilation.WebHandlerCompilationProvider。但是,在介于2.0和4.5之间的某个地方,不赞成使用LotPings进行不同类型的配置。后者可以配置为指定lanaguge版本,例如

<system.codedom>
 <compilers>
   <!-- zero or more compiler elements -->
   <compiler 
      language="c#;cs;csharp" 
      extension=".cs"
      type="Microsoft.CSharp.CSharpCodeProvider, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
      compilerOptions=""  
      warningLevel="1" />
 </compilers>
</system.codedom>

我想你的(非常旧的)代码库没有正确配置;可能是它使用旧的配置样式,或者版本标识符是错误的。

我的建议是将.ashx标记移动到正确的.cs文件,并在构建期间将其与所有其他代码一起编译。这将完全避免这个问题。否则你需要查看机器的配置(这些配置不一定在你的web.config中)并使它们全部对齐。