2017-01-19 33 views
0

もう少し前にC#6にアップグレードされた古いソリューションがありました。それは年齢、古い学校asp.netからウェブAPI 2までのすべてのもののために多種多様なプロジェクトタイプを持っています。しかし、何らかの理由で従来のasp.netプロジェクトのashxファイルはまだC#5をターゲットにしています新しい言語機能をいくつか使用することはできません(C#コードはashxファイル内にインラインで定義されていますが、別々のashx.csファイルはありません)。コンパイラをashxファイル用にアップグレードするにはどうすればよいですか?問題のフォローアップ - 残りのソリューションで使用されているコンパイラのバージョンを継承させるにはどうすればよいですか?ashxハンドラは古いC#コンパイラを使用しています

+0

.NET版のプロジェクトをアップグレードしないのはなぜですか? – Legends

+0

すでに4.5.1にありますが、実際にはC#6はプロジェクトのどこかで使用されています。それは文字通りashxのファイルです。 – gzak

+0

何が文句を言いますか? Strange ...しかし、あなたは 'public class SyncHandler:IHttpHandler'のように、ashxを使わずにハンドラを書き直すことができます。その後、web.configに登録します。それは同じだ。 – Legends

答えて

1

まず、マークアップに含まれるコード(.aspxや.ashxなど)は、コードビハインドと同じ方法でコンパイルされないことがわかります。コードビハインドはDLLにコンパイルされ、binフォルダに展開されます。一方、.ashxファイルと.aspxファイルをプリコンパイルするのに問題がなければ、ジャストインタイムベースでコンパイルされます。実際には、Webサーバー上で直接マークアップを変更することができ、その変更によって再コンパイルがトリガーされます。

第2に、.ashxのコンパイルが大幅に変更されたことに注意してください。以前は<BuildProviders> elementによってコンパイルが制御されていましたが、通常はSystem.Web.Compilation.WebHandlerCompilationProviderで構成されていました。しかし、2.0と4.5の間のどこかで、それは<Compilers> elementを使用して異なる種類の構成を支持して非難されました。後者は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ファイルに移動し、ビルド中に他のすべてのコードと共にコンパイルすることです。これでこの問題は完全に回避されます。それ以外の場合は、マシンのconfigsを覆う必要があります(これらの設定は必ずしもweb.config内にあるわけではありません)。

関連する問題