Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net ashx处理程序使用较旧的C#编译器_Asp.net_Ashx - Fatal编程技术网

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

Asp.net ashx处理程序使用较旧的C#编译器,asp.net,ashx,Asp.net,Ashx,我有一个旧的解决方案,它在不久前升级到了C#6,我们在大部分代码中都使用了它。由于年代久远,它有各种各样的项目类型,从老式的asp.net一直到web api 2。但是,由于某些原因,传统asp.net项目中的ashx文件仍然以C#5为目标,因此我们无法使用其中一些较新的语言功能(请注意,C#代码是在ashx文件中内联定义的,没有单独的ashx.cs文件)。如何升级ashx文件的编译器?后续问题-如何使其继承解决方案其余部分使用的编译器版本?首先,要知道标记中包含的代码(如.aspx或.ashx

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

首先,要知道标记中包含的代码(如.aspx或.ashx)的编译方式与codebehind不同。您的codebehind被编译成一个DLL,部署到您的bin文件夹中。同时,除非您费心预编译.ashx和.aspx文件,否则它们都是在实时的基础上编译的。实际上,您可以直接在web服务器上修改标记,这些更改将触发重新编译

其次,请记住.ashx编译已经发生了巨大的变化。过去,它的编译是由控制的,通常配置为
System.Web.compilation.webhandlercomilationprovider
。然而,在2.0和4.5之间的某个地方,这被弃用,取而代之的是使用不同的配置。后者可以配置为指定Lanagugge版本,例如

<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中),并将它们对齐。

首先,要知道标记中包含的代码(如.aspx或.ashx)的编译方式与codebehind不同。您的codebehind被编译成一个DLL,部署到您的bin文件夹中。同时,除非您费心预编译.ashx和.aspx文件,否则它们都是在实时的基础上编译的。实际上,您可以直接在web服务器上修改标记,这些更改将触发重新编译

其次,请记住.ashx编译已经发生了巨大的变化。过去,它的编译是由控制的,通常配置为
System.Web.compilation.webhandlercomilationprovider
。然而,在2.0和4.5之间的某个地方,这被弃用,取而代之的是使用不同的配置。后者可以配置为指定Lanagugge版本,例如

<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中),并将它们对齐。

为什么不升级项目的.NET版本?已经在4.5.1中,事实上,项目中的其他地方使用了C#6-实际上只是ashx文件在抱怨什么?奇怪。。。但是您可以在不使用ashx的情况下重写处理程序,例如:
公共类SyncHandler:IHttpHandler
。然后在web.config中注册它。这是一样的。红色的曲线,这个功能在C#5中是不可用的。诸如此类的事情。你是这么想的,但我可以附上截图和相反的证据;-)你为什么不升级项目的.NET版本呢?已经是4.5.1版本了,事实上C#6在项目的其他地方也被使用了——实际上只是ashx文件在抱怨什么?奇怪。。。但是您可以在不使用ashx的情况下重写处理程序,例如:
公共类SyncHandler:IHttpHandler
。然后在web.config中注册它。这是一样的。红色的曲线,这个功能在C#5中是不可用的。诸如此类的事情。你是这么想的,但我可以附上截图和相反的证据;-)