Подтвердить что ты не робот

Почему я получаю сообщение об ошибке "__CrtGetFileInformationByHandleEx", когда пытаюсь скомпилировать

Я только что установил сообщество Visual Studio 2015 на свой компьютер. До сих пор я использовал Visual Studio 2010 Professional. Теперь, когда я пытаюсь запустить мои приложения MVC в сборке на веб-сервере, я получаю следующее сообщение об ошибке.

Точка входа процедуры __CrtGetFileInformationByHandleEx не может быть расположена в \WINDOWS\SYSTEM32\msvcp120_clr0400.dll

Я получаю то же сообщение об ошибке, если я попытаюсь выполнить vbc.exe (компилятор Visual Basic) непосредственно в командной строке. Мое приложение MVC также показывает YSOD с

Ошибка компиляции - сообщение об ошибке компилятора: сбой компилятора с кодом ошибки -1073741511.

Как я могу исправить мой VS, чтобы снова запустить свои программы?!

Шаги, которые я пробовал

  • Удалить сообщество VS 2015
  • Удалить и переустановить .NET 4.6 и .NET 4.5.2
  • DISM/Online/Cleanup-Image/RestoreHealth
  • Инструмент восстановления .NET.
  • Запустить sfc/scannow
  • Вручную переименуйте файл msvcr120_clr0400.dll в msvcr120_clr0400.dll.corrupt и сделайте 1-5
  • Удалить и переустановить VS 2010 w/SP1

sfc /scannow успешно заменил файл msvcr120_clr0400.dll, но он заменил его тем же самым CTP файлом, что и раньше!

ИЗМЕНИТЬ

Проблема dll из моей системы доступна для загрузки здесь:

4b9b3361

Ответ 1

Microsoft знает об этой проблеме с KB3098779 и 3097997:

https://support.microsoft.com/en-us/kb/3118750

Рекомендация заключается в удалении этих патчей, а затем повторной проверки обновлений. Теперь доступны новые версии этих патчей безопасности (которые не нарушают компилятор VB).

Ответ 2

Хорошо, я вижу это из файлов, загруженных в службу обмена, ваша установка .NET повреждена. Проблема с DLL Hell, ваш файл c:\windows\syswow64\msvcr120_clr400.dll - неправильная версия. Что-то, что вы можете увидеть при использовании Проводника и перейти к файлу. Щелкните правой кнопкой мыши и выберите "Свойства", перейдите на вкладку "Сведения".

введите описание изображения здесь

Обратите внимание на слово "CTP" в названии продукта, это означает "Предварительный просмотр технологии сообщества". Термин Microsoft означает "бета-версия". Очевидно, что на вашей машине не должно быть бета-версии VS2013. Ваш msvcp120_clr0400.dll верен, это версия файла 12.0.52512.0. Это зависит от экспортируемой функции в DLL msvcr, которая еще не имела версии CTP.

Точно, как это случилось, всегда сложно перепроектировать. Вы третий пользователь SO, которого я знаю об этой проблеме на этой неделе, слишком много совпадений. Два основных сценария, если у вас когда-либо была версия CTP VS2013, установленная на компьютере, проблема в том, что она не обновилась, как должна быть. В противном случае очень типичная проблема с выпусками CTP, они довольно опасны, потому что деинсталлятор всегда является последним, что Microsoft получает правильно. И проблема была просто не обнаружена, пока вы не начали использовать программу, требующую этого экспорта.

Или это было вызвано установщиком изгоев, скопировавшим старую версию на ваш компьютер без проверки номера версии. Гораздо менее вероятно, что установщики никогда не имеют веской причины для установки этого конкретного файла, поскольку он используется только когда-либо .NET Framework. Поэтому мои деньги на вашей машине повреждены CTP.

Вам нужно решить эту проблему, исправив вашу машину. Не так просто, вы никогда не можете быть уверены, сколько других плохих DLL файлов лежит вокруг такой плохой CTP-деинсталляции. Ярлык копирует эту конкретную DLL с хорошей машины. Но лучше всего переустановить .NET 4.6.

ИЗМЕНИТЬ из OP:

Этот ответ правильно идентифицировал файлы проблем, но переустановка (или любые другие общие шаги) не решила его. В конце я скопировал "хорошие" файлы с другого компьютера с номером версии 12.0.20806.33440.

Ответ 3

KB3098779, по-видимому, является виновником на нашем сервере. Это патч, который установил мошенник CTP msvcr120_clr0400.dll, упомянутый в приведенном выше ответе. Решение: мы отменили набор патчей, который применил KB3098779, и все работает снова. FYI: это проблема .NET framework 4+, а не Visual Studio. Наш сервер - стандартный IIS-сервер 2012: Visual Studio не установлен.

Ответ 4

У меня была такая же проблема в Windows 8.1, хотя KB3098779 и 3097997 не были установлены на моей машине. Вероятно, это произошло после установки ASP.Net 5.

Проблема заключалась в том, что у меня были файлы mcvcr в версии 12.0.51670.34230, в то время как файлы mcvcp уже были в 12.00.52512.0. Этого было достаточно, чтобы скопировать файлы mcvcr (из System32 и SysWOW64) в этой версии из моего коллеги pc.

Если у вас есть проблемы с разрешениями, установленными в TrustedInstaller в этом файле, вы можете запустить эту команду powershell, а затем изменить права администратора как:

takeown /A /F C:\windows\syswow64\msvcr120_clr0400.dll

Ответ 5

Корпорация Майкрософт выпустила уведомление об этом. https://support.microsoft.com/en-us/kb/3118750

Как указывали другие, слишком много людей слишком короткое время, чтобы быть совпадением. Не проблема с VS, это связано с плохим обновлением от Microsoft.

В информации от MS упоминаются два патча безопасности (KB3098779 и KB3097997).

Я удалил только KB3098779, и мой сайт запущен и работает. Для завершения

потребовался перезапуск машины.

KB3097997 удален без перезагрузки. Мне, возможно, не нужно было удалять, но кажется разумным, учитывая, что он также подчиняется тому же уведомлению от MS.