2012-11-12 3 views
8

У меня есть сайт, который был и работает:Компилятор исполняемый файл csc.exe не может быть найден в .NET 4.5 Azure развертывание

  • ASP.NET 4
  • MVC 3
  • Entity Framework 4.3
  • Запуск в Azure веб-роли (я заметил, что это было osFamily = «1», что странно, как я ожидал, что это будет 2 - но все равно ...)
  • Azure SDK 1.7

Я обновил всю свою кодовую базу, чтобы быть в курсе множества новых игрушек. Так что теперь это:

  • ASP.NET 4.5
  • MVC 4 (Бритва 2)
  • Entity Framework 5
  • Лазурное конфигурации набор для osFamily = "3"
  • Azure SDK 1.8 (с Библиотека хранения клиента кропотливо повышена до 2 не 1.7)

Когда я получить доступ к сайту в постановке я получаю желтый экран смерти, говоря Compiler исполняемого файла csc.exe не найдено. Мой вопрос: Почему?

Он отлично работает на месте, в режиме Release. Я удалился, и в экземплярах определенно работает Windows Server 2012 (поэтому .NET 4.5? Я видел, что это сложно сказать, поскольку .NET 4.5 заменяет сборки .NET 4 в папках .NET 4).

В соответствии с заголовками ответа, это определенно работает IIS 8, но интересно, что он утверждает, что X-ASPNET-VERSION - 4.xxxx. Это нормально для сайта ASP.NET 4?

UPDATE:

Таргетинг рамки .NET 4 и изменил osFamily до 2, и теперь он работает. Поэтому я подозреваю, что у меня есть сторонняя сборка, которая использует .NET 3.5 или 2 (действительно, я уверен, что я это делаю), но уверенно, что при таргетинге на .NET framework выше, чем в ссылках в импортированных сборках, более высокая версия фреймворка используемый??

osFamily = "3" только установил .NET 4 и 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 

ответ

1

Хорошо, Дэвид Эббо указал мне в правильном направлении, и я начал изучать Entity Framework Profiler. Существует нить here об этом.

Немного о нем, создающем сборку во время выполнения, и казалось бы osfamily = "3" (Server 2012) не позволит это (он работал на osfamily = "2" (Server 2008 R2)). Не собираюсь отлаживать больше, чем это, потому что я не хочу, чтобы профилировщик в моей живой среде в любом случае. Удаление EF Profiler заставило его работать.

2

Да, если у вас есть сервер 2012, вы определенно работает Fx 4.5 и не 4.0, как и что это в обновлении место.

Чтобы ответить на ваш вопрос выделен жирным шрифтом, данное приложение ASP.NET может использовать только одну структуру за раз. Если вы работаете как сайт 4.5, то все сборки 2.0/3.5 должны запускаться в соответствии с Framework 4.5.

Так что я подозреваю, что эти старые сборки не корень вашей проблемы.

Это, как говорится, я не могу объяснить вопрос csc. Это может помочь включить точное сообщение об ошибке, которое вы получаете, а также часть трассировки стека.

+0

Спасибо, Дэвид. Хорошо, мои подозрения верны в версии .NET, но теперь у меня заканчиваются идеи. Я добавил Stack Trace, как было задано. Я замечаю, что Hibernating Rhinos так интересно, если это связано с EF Prof. Я не понимаю, почему, но я могу попытаться избавиться от него. – BritishDeveloper

+2

Ах да, стек интересен, поскольку мы видим, что csc не запускается ASP.NET но HibernatingRhinos. И я вижу, что вы нашли тему на своем форуме, касающуюся этого. Спасибо за наградные очки :) –

+0

David Ebbo! Ты спас меня! У меня также HibernatingRhinos, которые генерируют мне эту ошибку! Спасибо! –

2

У меня был подобный выпуск. Убедитесь, что вы настроили правильный компилятор. я целился v4.5 (но там Шоул быть v4.0 как сейчас 4,5 составитель)

В проверке web.config

<system.web> 
<compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.0"> 
</system.web> 
0

Я отправляю это в надежде что это поможет кому-то , Мы динамически компилировали код с версией 2 фреймворка, а на сервере .net 4 мы получили сообщение об ошибке. Это было просто потому, что мы жестко рамочной версия:

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

Так что это просто вопрос удаления, что - по-видимому, так оно компилирует с любой версией базы используется в данный момент.

var provider = new CSharpCodeProvider(); 

Так что ошибка просто о необходимости код для компиляции, но компилятор для требуемой рамочной версии нет. Другой вариант состоял в том, чтобы убедиться, что установлена ​​функция .net 3.5.