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

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

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

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

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

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

Шаги я пробовал

  1. Удалить VS 2015 Сообщество
  2. Удалите и переустановите.NET 4.6 и.NET 4.5.2
  3. DISM / Online / Cleanup-Image / RestoreHealth
  4. .NET Repair Tool
  5. Запустите SFC / Scannow
  6. Вручную переименуйте файл msvcr120_clr0400.dll в msvcr120_clr0400.dll.corrupt и выполните 1-5
  7. Удалите и переустановите VS 2010 с пакетом обновления 1

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

РЕДАКТИРОВАТЬ:

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

5 ответов

Решение

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

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

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

Хорошо, я вижу это из файлов, которые вы загрузили в сервис обмена, ваша установка.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. Поэтому мои деньги на вашей машине портятся ОСАГО.

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

РЕДАКТИРОВАТЬ из OP:

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

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

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

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

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

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

Microsoft выпустила уведомление об этом. https://support.microsoft.com/en-us/kb/3118750

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

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

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

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

Другие вопросы по тегам