为什么我会收到错误" __ CrtGetFileInformationByHandleEx"当我尝试编译

时间:2015-11-15 15:09:57

标签: visual-studio-2010 visual-studio-2015

我刚在计算机上安装了Visual Studio 2015社区。到目前为止,我一直在使用Visual Studio 2010 Professional。现在,当我尝试在Web服务器的构建中运行我的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修复工具
  5. 运行sfc / scannow
  6. 手动将msvcr120_clr0400.dll文件重命名为msvcr120_clr0400.dll.corrupt并执行1-5
  7. 卸载并重新安装VS 2010 w / SP1
  8. sfc /scannow成功替换了msvcr120_clr0400.dll文件,但用与以前完全相同的 CTP文件替换了它!

    修改

    我的系统中的问题可以从这里下载:

5 个答案:

答案 0 :(得分:28)

Microsoft已知道KB3098779和3097997:

的此问题

Google documentation

建议卸载这些修补程序,然后重新扫描以获取更新。现在可以使用这些安全补丁的较新版本(不破坏VB编译器)。

答案 1 :(得分:3)

好的,我从您上传到共享服务的文件中看到它,您的.NET安装已损坏。一个标准的DLL Hell问题,你的c:\ windows \ syswow64 \ msvcr120_clr400.dll文件是错误的版本。使用资源管理器并导航到文件时可以看到的内容。右键单击并选择“属性”,查看“详细信息”选项卡。

enter image description here

请注意产品名称中的“CTP”一词,表示“社区技术预览”。 Microsoft术语,表示“beta版”。显然你不应该在你的机器上安装VS2013测试版。您的msvcp120_clr0400.dll是正确的,它是文件版本12.0.52512.0。它取决于msvcr DLL中CTP版本尚未具有的导出函数。

究竟如何发生这种情况总是很难逆向工程。你是我所知道的第三个SO用户本周有这个问题,有点太巧合了。两个基本场景,如果您在机器上安装了VS2013 CTP版本,那么问题是它没有得到应有的更新。否则是CTP版本的一个非常典型的问题,它们非常危险,因为卸载程序始终是Microsoft正确的最后一件事。在您开始使用需要此导出的程序之前,问题才会被发现。

或者它是由恶意安装程序引起的,将旧版本复制到您的计算机上而不检查版本号。更不可能的是,安装程序从来没有充分的理由安装此特定文件,因为它只被.NET Framework使用。因此,我的钱在您的机器上被CTP损坏。

您需要通过修复机器来解决此问题。不是那么容易,你永远无法确定有多少其他坏的DLL正在摆脱如此糟糕的CTP卸载。一个捷径是从一台好机器复制这个特定的DLL。但最好重新安装.NET 4.6。

来自OP的编辑:

此答案正确识别了问题文件,但重新安装(或任何其他常见步骤)并未解决问题。最后,我从另一台计算机上复制了“好”文件,版本号为12.0.20806.33440。

答案 2 :(得分:3)

KB3098779似乎是我们服务器的罪魁祸首。这是安装上述答案中提到的流氓CTP msvcr120_clr0400.dll的补丁。 解决方案:我们撤销了应用KB3098779的补丁集,一切正常。 仅供参考:这是一个.NET框架4+问题,而不是Visual Studio。我们的服务器是标准的2012 IIS服务器:未安装Visual Studio。

答案 3 :(得分:2)

我在Windows 8.1上遇到了同样的问题,但我的机器上没有安装KB3098779和3097997。可能是在安装ASP.Net 5之后发生的。

问题是我在版本12.0.51670.34230中有两个mcvcr文件,而mcvcp文件已经在12.00.52512.0中。从我的同事的电脑中复制这个版本的mcvcr文件(来自System32和SysWOW64)就足够了。

如果您在这些文件上设置了TrustedInstaller权限时遇到问题,可以运行此powershell命令,然后以管理员身份更改权限:

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

答案 4 :(得分:0)

微软已就此发布通知。 https://support.microsoft.com/en-us/kb/3118750

正如其他人在太短的时间内指出太多人是巧合。这不是VS问题,而是与Microsoft的错误更新有关。

来自MS的信息提到了两个安全补丁(KB3098779和KB3097997)。

我只卸载了KB3098779,我的网站启动并运行。它需要重启机器才能完成

KB3097997未重启时已卸载。我可能不需要卸载但是看起来很明智,因为它也受到来自MS的相同通知。