9

私は以前と機能しているサイトを持っています

  • ASP.NET 4
  • MVC 3
  • Entity Framework 4.3
  • Azure Webロールで実行している(2であると予想していたので奇妙なosFamily = "1"であることに気づきましたが、とにかく...)
  • Azure SDK 1.7

コードベース全体をアップグレードして、たくさんの新しいおもちゃを最新の状態にしています。だから今それは:

  • ASP.NET 4.5
  • MVC 4(Razor 2)
  • Entity Framework 5
  • Azureの構成をosFamily="3"に設定
  • Azure SDK 1.8(ストレージクライアントライブラリを1.7ではなく2に丹念にアップグレード)

ステージング中にサイトにアクセスすると、コンパイラの実行可能ファイルcsc.exeが見つからないという黄色の画面が表示されます。私の質問はなぜですか?

リリースモードでも、ローカルで正常に動作します。リモートインしたところ、インスタンスは確実にWindows Server 2012を実行しています(したがって、.NET 4.5 ?? .NET4.5が.NET4フォルダー内の.NET4アセンブリを置き換えるため、わかりにくいことがわかりました)。

応答ヘッダーによると、それは間違いなくIIS 8を実行していますが、興味深いことに、X-ASPNET-VERSIONは4.xxxxであると主張しています。これはASP.NET4サイトでは正常ですか?

アップデート:

.NET 4フレームワークをターゲットにして、osFamilyを2に変更すると、動作するようになりました。したがって、.NET 3.5または2を使用するサードパーティのアセンブリがあると思われますが(実際には確かにそうです)、インポートされたアセンブリで参照されているものよりも高い.NETフレームワークをターゲットにする場合は、より高いバージョンのフレームワークが使用されます。 ??

osFamily ="3"には.NET4と4.5しかインストールされていないので、これがエラーの原因だと思いますが、ターゲティングについて正しくありませんか?osFamily = "3"を使用したいのですが、ここで何ができますか?

スタックトレース

[InvalidOperationException: Compiler executable file csc.exe cannot be found.]
   System.CodeDom.Compiler.RedistVersionInfo.GetCompilerPath(IDictionary`2 provOptions, String compilerExecutable) +8675071
   Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames) +739
   Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources) +3293761
   Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(CompilerParameters options, String[] sources) +64
   HibernatingRhinos.Profiler.Appender.Util.GenerateAssembly.Compile(String fileName, String[] sources, IEnumerable`1 assembliesToReference) +1252
   HibernatingRhinos.Profiler.Appender.Util.GenerateAssembly.CompileAssembly(IEnumerable`1 sourcesResources, IEnumerable`1 assembliesToReference, String assemblyName) +118
   HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.SetupDatabaseDefaultConnectionFactoryIfNeeded() +929
   HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.SetupEntityFrameworkIntegration() +80
   HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize(EntityFrameworkAppenderConfiguration configuration) +47
   HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize() +73
   Web4.MvcApplication.Application_Start() +17

[HttpException (0x80004005): Compiler executable file csc.exe cannot be found.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12864673
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): Compiler executable file csc.exe cannot be found.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12881540
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12722601
4

5 に答える 5

3

同様の問題がありました。正しいコンパイラをターゲットにしていることを確認してください。私はv4.5をターゲットにしていました(しかし、現在4.5コンパイラがあるのでv4.0があるはずです)

web.configでチェック

<system.web>
 <compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.0">
</system.web>
于 2014-03-31T18:10:10.503 に答える
2

はい、Server 2012を使用している場合は、4.0ではなくFx 4.5を実行しています。これは、インプレースアップグレードであるためです。

太字で質問に答えるために、特定のASP.NETアプリは一度に1つのフレームワークしか使用できません。4.5サイトとして実行している場合、2.0/3.5アセンブリはフレームワーク4.5の場合と同じように実行する必要があります。

ですから、私の疑いは、それらの古いアセンブリが問題の根本ではないということです。

そうは言っても、cscの問題を説明することはできません。取得している正確なエラーメッセージと、スタックトレースの一部を含めると役立つ場合があります。

于 2013-01-14T18:48:25.643 に答える
1

さて、David Ebboは私を正しい方向に向け、EntityFrameworkProfilerの精査を開始しました。ここにそれについてのスレッドがあります。

実行時にアセンブリを作成することについての何かがあり、osfamily = "3"(Server 2012)はそれを許可しないようです(osfamily = "2"(Server 2008 R2)で動作しました)。とにかくライブ環境にプロファイラーが必要ないので、それ以上デバッグするつもりはありません。EFプロファイラーを削除すると機能しました。

于 2013-01-15T20:47:01.160 に答える
0

私はそれが誰かを助けることを願ってこれを投稿しています。フレームワークのバージョン2を使用してコードを動的にコンパイルしていましたが、.net4のみのサーバーでエラーメッセージが表示されました。フレームワークのバージョンをハードコーディングしたからです。

var provider = new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v3.5" } });

したがって、それを削除するだけの問題でした。おそらく、その時点で使用されているフレームワークのバージョンに関係なくコンパイルされます。

var provider = new CSharpCodeProvider();

したがって、エラーはコンパイルする必要のあるコードに関するものですが、必要なフレームワークバージョンのコンパイラが存在しません。もう1つのオプションは、.net3.5機能がインストールされていることを確認することだけでした。

于 2017-03-26T23:31:23.227 に答える
0

AWS WindowsServer2019イメージでも同様の問題が発生しました。

互換性のCSharpCodeProvider理由から、は.Netバージョン2.0に設定されました。

 new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v2.0" } });

ASP 4.7機能をインストールしましたが、この問題を除いてアプリは正常に動作しました。
.Net2.0がマシンにインストールされていないことが判明しました。

解決策-Windowsサーバー管理コンソールから.Net3.5機能をインストールします。
.Net3.5には.Net2.0が付属しています

于 2020-10-05T18:54:19.553 に答える