I have a site which was and works:
I have upgraded my entire codebase to be up to date with the plethora of new toys. So now it is:
When I access the site in staging I get a yellow screen of death saying Compiler executable file csc.exe cannot be found. My question is Why?
It works fine locally, in Release mode too. I remoted in and the instances are definitely running Windows Server 2012 (therefore .NET 4.5?? I've seen it's hard to tell since .NET 4.5 replaces .NET 4 assemblies in the .NET 4 folders).
According to the response headers it is definitely running IIS 8 but interesting it claims X-ASPNET-VERSION is 4.xxxx. Is this normal for a ASP.NET 4 site?
UPDATE:
I targeted the .NET 4 framework and changed the osFamily to 2 and it now works. So I now suspect that I have a 3rd party assembly that uses .NET 3.5 or 2 (infact I'm certain I do) but surely when targeting a .NET framework higher than ones referenced in imported assemblies the higher version of the framework is used??
osFamily="3" only has .NET 4 and 4.5 installed so I guess this is the reason for the error but am I not right about the targeting thing? I want to use osFamily="3" what can I do here?
Stack trace
[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
I had similar issue. Make sure that you are targeting correct compiler. I was targeting v4.5 (but there shoul be v4.0 as there is now 4.5 compiler)
In web.config check
<system.web>
<compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.0">
</system.web>