调试时从对COM组件VS2012的调用返回了错误HRESULT E_FAIL


100

我在调试从Visual Studio 2010迁移到2012的项目时遇到问题。每次调试时,都会收到错误消息:

“从对COM组件的调用中返回了错误HRESULT E_FAIL”。

在本地IIS服务器中编译和运行应用程序工作正常-只是无法调试。

除了迁移到VS2012之外,另一个变化是我现在正在使用Team Foundation Server进行源代码控制和问题跟踪-但是我看不到这会如何影响它。

我可以缩小到以下范围

  • 项目文件-它已从VS 2003迁移为网站项目,并已切碎并更改了不同版本
  • Crystal Report运行时库/其他库

有任何想法吗?


您可以发布升级日志文件吗?另外,您在解决方案中的项目结构以及错误的图片。
Nexus23 2013年

您曾经设法弄清楚吗?我遇到了完全相同的问题,正在拔头发!
克里斯·菲利普斯

不,我必须继续使用VS2010-该项目正在被重写,因此当前的开发工作几乎停止了……
Matt

下面最近删除的答案表明,Windows Update可以解决此问题。
Halfer

嗨,您接受了一个答案,但是@TimHall的解决方案可能更容易且不那么麻烦。你试过了吗?
斯宾塞

Answers:


59

我删除了csproj.user文件,它对我有用。

在其他情况下,要解决此错误,我转到项目属性中的“ Web”选项卡,然后选中“使用Visual Studio开发服务器”和“自动分配端口”。之后,我需要重建项目并重新启动VS


宾果游戏-无法相信这是造成问题的原因-感谢您发布此信息。
马特

7
截至MVS2017为止有一点澄清。转到工具->选项...,然后选择项目和解决方案-> Web项目,然后取消选中“在服务器资源管理器中自动显示来自web.config的数据连接...”,然后重新编译。从2019年开始的问候,就像魅力一样!
Wormer

我试过这款Wormer,但它对我不起作用。
Abhijeet Sinha

Neithre去除csproj.user帮助
Abhijeet辛哈

75

我最近得到了很多。我一直在创建一个新文件并将代码移到新文件中来解决它。

我通过删除解决方案的suo文件来修复它(据我所知,它仅存储信息,例如在IDE和东西中打开了哪些文件,并且删除它并没有造成实际损害)。

我的文件似乎已损坏。(IDE不会记住重新启动时打开了哪些文件。它的大小为1.7MB,这似乎很大,即使对于我的40项目解决方案而言,它很少一次打开超过50个文件。)

编辑:我最近才在VS2017中这样做,但是由于另一个原因,它花费了更长的构建时间并花费了5分钟以上的时间来停止调试会话,删除了那个讨厌的suo文件,将其修复了,现在,无论何时VS行为奇怪地删除了SUO是我的第一个停靠港。


1
解决方案对我有用(VS 2013-Winforms Application)
Nikos Tsokos

尝试了所有方法,但这是唯一对我有用的解决方案..谢谢@Tim Hall
Malik Khalil

谢谢!这对我
有所

在VS 2017中也可以使用。
ctwheels

4
谢谢,删除了.vs目录树,它修复了VS2017中具有相同错误的生成问题。
Pavel Machyniak

68

我在Visual Studio 2019中的c ++项目中遇到了相同的问题。

以下解决方案为我工作:

  • 关闭Visual Studio。
  • 转到项目的根文件夹,然后删除.vs目录。
  • 启动Visual Studio并打开解决方案。
  • 该构建现在应该可以工作了。

3
为我工作。删除.vs目录后,不要忘记关闭VS。.vs目录已隐藏,顺便说一句。
哈里

VS 2019中的C ++也来自Cmake OpenCV构建文件夹。从根目录中删除(隐藏).vs文件夹,它起作用了。您才是真正的超级英雄!
Todd-ECU

10

这解决了我的问题:

开始->运行-> regsvr32 %SystemRoot%\System32\msxml3.dll

开始->运行-> regsvr32 %SystemRoot%\SysWOW64\msxml3.dll

在此之前,我尝试了Simon的上述解决方案,但对我没有用!

也许将这两种解决方案结合起来就可以了!


2
这也为我工作。我不知道VS是如何进入这种状态的,但这使我脱离了状态。打开解决方案时出现此错误
the_mandrill

6

抱歉,死线程复活了,但是我在VS2017上通过删除项目模板缓存和项目模板缓存文件夹来解决了这个问题

%localappdata%\Microsoft\VisualStudio\[BUILD]

然后通过重置视觉工作室设置

Tools>Import and export settings>reset all settings

我也听说关闭“所有项目的轻量级解决方案负载”会有所帮助。


1
这也对我有用。我只是重命名了所有带有Visual Studios和VS的文件夹,然后重新创建了所有文件夹,而我的错误消失了。谢谢!
TravisWhidden '18年

“工具>导入和导出设置>重置所有设置” tyvm对我有用。
Jhollman

5

我想补充一点的是,在WinForms应用程序中打开设计器文件时遇到了此错误。我的问题是项目中的引用之一是引用自身。显然,这可能发生在这里

https://social.msdn.microsoft.com/Forums/office/zh-CN/00aede04-d8cd-4475-8114-4b4792261052/winforms-designer-error-hresult-efail-has-been-returned-from-a-调用COM组件

我删除了参考,它工作正常。


1
这不是仅链接的答案。它描述了一种可能的解决方案,并提供了链接作为参考。
罗伯特·哥伦比亚

1
这对我也有用。自从我上一次git commit以来,我的.proj文件本身就有这个神奇的参考条目。HintPath指向项目的obj \ Debug文件夹。删除了该条目并进行了重建,现在我所有的设计师都在工作。
卡尔,

1
这也对我有用。项目为UserControl引用了自己。必须删除参考,先清理项目,然后重建。WinForm现在打开!
Doug Knudsen

4

也许此页面有帮助:

方案二:创建或调试Web应用程序项目时,Microsoft Visual Studio 2010 IDE崩溃。发生上述错误是由于Visual Studio 2010的缓存损坏。要解决此问题,只需从以下位置删除项目缓存:

C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplatesCache

C:\Program Files(x86)\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplatesCache

然后运行devenv.exe /setup以重新构建缓存。


我只是遇到了类似的问题,这对我来说已经解决了。谢谢西蒙!(我使用的是VS2013,仅供参考)
JR Smith

4

h!万一其他人尝试附加到IIS网站时遇到此错误。

三重检查您的主机名是否正确,我在(例如)http://my.testsite.com中忘记了“ /”

像我一样重新安装Visual Studio之前,请尝试此操作。


1
就我而言,我尝试覆盖应用程序根URL,以将GET参数添加到启动的URL中。那是做错地方。应该在同一属性页面上设置了起始URL。
凯特

3

我尝试了上述所有解决方案,但对我都不起作用,我在这里找到了解决方案

  • 通过进入打开ActivityLog.xml

    C:\Users\{UserName}\AppData\Roaming\Microsoft\VisualStudio\15.{Id} 
    
  • 检查错误是否指出

    "CreateInstance failed for package 
    [ReferenceManagerPackage]Source: 'mscorlib' Description: Could not load type 
     'Microsoft.VisualStudio.Shell.Interop.' from assembly 
     'Microsoft.VisualStudio.Shell.Interop.11.0' 
    
  • 然后gacutil通过VS Cmd提示符(管理模式)运行以下命令:

    1. 导航

      C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\PublicAssemblies   
      
    2. gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll


1
这是唯一对我有用的解决方案(VS 2017 Professional / Windows 10)。我还在活动日志中看到了mscorlib错误。修复和重置所有设置均无效。
尼克·范·布伦特

2

从VS2013升级到VS2015后,我遇到了同样的问题。

我所从事的项目本身就是参考对象。虽然VS2013不在乎,但VS2015不喜欢那样,我得到了那个错误。删除引用后,错误消失了。我花了大约四个小时才发现...


链接现在已死。
假名称

谢谢,我删除了链接。由于我为我解决此问题的方式就在链接下面,因此至少我的回答并非完全没有用。
耶夫

2

似乎要在Visual Studio 2017中弹出``添加引用''对话框,需要在GAC中重新注册Microsoft.VisualStudio.Shell.Interop.11.0.dll。您可以按照以下步骤在GAC中注册此程序集:

打开VS2017的开发命令提示符(确保您以管理员身份运行,否则GAC注册可能会失败)

将当前目录更改为Visual Studio 2017安装的PublicAssemblies文件夹。我的是:

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ PublicAssemblies

运行以下命令以在GAC中注册程序集:

gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ PublicAssemblies> gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll Microsoft(R).NET全局程序集缓存实用程序。版本4.0.30319.0版权所有(c)Microsoft Corporation。版权所有。

程序集成功添加到缓存

现在重新启动VS2017并尝试再次添加对项目的引用,您应该看到出现“添加引用”对话框。

如需更多说明,请点击以下链接

https://camerondwyer.com/2017/05/03/how-to-fix-the-operation-could-not-be-completed-error-adding-reference-to-visual-studio-2017/#more-2286


尽一切努力。这在第一时间对我起作用。
Yeshwant Mudholkar

2

我在以下https://developercommunity.visualstudio.com/content/problem/260196/add-a-reference-raise-error-error-hresult-e-fail-h.html地址中找到了解决方案。

它在VS 2019中为我工作:

1以管理员身份打开“ VS 2017开发人员命令提示符”

2 CD放入“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ PublicAssemblies”

3运行“ gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll”

重新启动后,一切正常。


1

我编写了一个简单的程序,可以在单击某些特定按钮时打开其他文件夹。我将文件属性设置为“内容”和“如果更新则复制”以进行部署。因此,如果我在其他软件中安装了exe文件,则它实际上会安装其所有资源并正常运行该程序。所以,这一切都与我的程序有关。有时在开发此程序时(如果我运行程序进行检查),则显示错误

“已从对COM组件的调用返回了HRESULT E_FAIL”

而且我无法打开设计器视图。但是不知何故我得到了一个简单的解决方案。我不确定它是否对其他人有用。

解决方法如下:

将整个应用程序文件夹复制到另一个位置。从那里单击应用程序文件。它只是一个副本,因此您将看不到设计器,因此它将不起作用

  1. 从解决方案资源管理器中删除form1.vb(如果在开发过程中被更改,则可以使用其他名称)
  2. 在解决方案资源管理器中>右键单击>添加现有项>浏览文件Form1.vb,从其中复制文件夹(原始位置)
  3. 在新位置运行程序。会工作的

如果您要添加一些东西,并且在运行该程序后发现相同的错误,则此解决方案存在问题,您必须再次将整个应用程序文件夹复制到另一个位置,然后按照上述步骤进行操作


1

我安装了最新的Windows 10 SDK后,对我来说发生了错误。使用SDK 8.1构建C ++项目时出现错误。在项目属性中,我切换到最新的10 SDK。重建。那行得通。改回8.1。重建。没错



1

根本原因: GAC中缺少Microsoft.VisualStudio.Shell.Interop.11.0.dll。

解决方案: 1.转到开始菜单,然后打开Visual Studio的命令提示符。2.输入命令gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll 3.如果万一您的系统找不到此dll文件,则可以下载它可以从Nuget程序包管理器中获取,然后可以提供dll的路径

搞定!按Enter键,就完成了!


0

解决问题的步骤:

1.以管理员模式在VS 2012中打开解决方案/ Web应用程序。

2.转到IIS,并记下您的应用程序设置(例如,虚拟目录名称,物理路径,身份验证设置和使用的应用程序池)。

3.从“默认网站”中删除(右键单击并选择“删除”)您的应用程序。刷新IIS。

4.返回到VS 2012并打开Web应用程序的设置(右键单击并选择属性)。

5.选择Web。在“服务器”部分中,确保已选择“使用本地IIS Web服务器”。

6.在Project Url文本框中,输入您的应用程序路径(http:// localhost/ Application Path)。单击创建虚拟目录。

7.转到IIS并应用步骤2中所述的设置。刷新IIS。

8.转到VS 2012,将此项目设置为启动项目,将适当的页面设置为启动页面。

9.单击运行按钮以调试模式启动项目。

从VS 2010迁移到2012的Web应用程序已为我解决了此问题。希望这对寻求特定问题的人有所帮助。

我的机器配置是:IIS 7.5.7600.16385

VS 2012专业版

Windows 7企业版(版本6.1-内部版本7601:Service Pack 1)


我找不到上面第5步中提到的任何“ Web.In服务器”。唯一的“设置”(步骤4)是属性页(Shift-F4),该属性页在步骤8中被松散引用。
MacSpudster 2014年

0

这在我们的TFS构建服务器中有时会发生(门控检入)。它是关于工作区文件夹的。我不知道为什么,但是工作区文件夹访问有时会损坏。我要解决的问题是删除TFS构建工作区并删除相关的工作区文件夹。TFS构建机器然后为其自身创建新的工作区,并且问题已解决。

Tousif Ahmed的解决方案应适用于本地构建。将应用程序文件夹复制到另一个位置应该与在TFS构建计算机中执行的操作相同。


我们不使用TFS,而这是我们遇到问题的另一台开发者机器上的内容
Matt

0

以我为例,此消息似乎可以由Visual Studio 2013中的Intellisense发出。下面的屏幕快照显示了在首次加载客户项目后VisualStudio 2013底部的错误。 VS2013“ ERROR-HRESULT-E截图

我开始搜寻是什么导致了此错误,然后决定尝试如上所述删除user.vxproj文件。但是,我发现该项目的构建没有问题,因此在退出并重新加载该项目后,我不再收到该错误。因此,在我的情况下,由于将项目从客户目录树结构移动到本地开发磁盘树结构,导致了一些损坏。在这里,关键是我的问题是暂时的。我什么也没做,问题似乎可以解决。(通常这不是一件可取的事情,因为我没有修复任何东西,所以它可能会回来)。


我的回答不清楚。我尝试删除user.vxproj文件,但没有任何效果。我的经验是,构建后问题得以解决,退出vs2013然后重新启动。可接受的答案不适用于我的情况,并且看来,如果您加载,构建,退出,重新加载,问题可以自行纠正。
Ross Youngblood

0

我最近花了大约3个小时来尝试在本地IIS上运行的ASP.NET应用程序上解决此问题。我指定了“替代应用程序根URL”,并用诸如http://my.dev.com/。的反斜杠(/)结束了该URL 。如果我保存了项目选项,然后又返回其中,则会将覆盖的根URL显示为http://http://my.dev.com。一旦删除了最后一个正斜杠,它就会开始正常运行,并且错误消失了。


0

HRESULT E_FAIL已从对COM组件的调用返回

就我而言,这是因为我的解决方案中有多个具有相同GUID的项目。(项目是通过复制/粘贴创建的)


0

我的问题表现为打开Win10 appxmanifest文件(无双关语)。只需安装Windows 10工具和SDK(转到“新建”->“项目”->“选择Windows->安装工具”)即可对其进行修复。


0
  1. 添加在x86架构或64位系统上启动的开发,然后它也将在32位系统上运行。
  2. 但是,如果您在32位系统上启动添加开发,然后要在64位源代码上进行更改,请注意:如果在服务器系统上连接了SAP许可证,请通过服务管理器设置端口并设置服务器名称,否则系统会给出错误:

连接上下文:-由于以下错误,未能检索具有CLSID {632F4591-AA62-4219-8FB6-22BCF5F60090}的组件的COM类工厂:80040154未注册类(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG)。


0

我通过删除ComponentModelCache文件夹修复了同一问题

  1. 关闭Visual Studio(如果您出于绝望而没有这样做的话)
  2. 打开文件资源管理器窗口,然后导航至您的AppData文件夹。您可以通过以下方式到达那里:
    1. 在搜索栏中,输入%APPDATA%/..并按Enter
    2. 或者,浏览至 C:\Users\\AppData
  3. 进入Local\Microsoft\VisualStudio\<version>Visual Studio 2013的12.0版本。
  4. 删除ComponentModelCache文件夹。

从这里:http : //withmartin.net/how-visual-studios-component-model-cache-can-be-a-pain/


0

不知道错误的确切再现步骤(从对COM组件的调用中返回了HRESULT E_FAIL),但是对我来说,解决方案是:

  1. 关闭Visual Studio并通过控制面板修复它。
  2. 重启系统

重新启动后,错误消失了。


0

我在Visual Studio 2017中遇到了相同的问题,请按照以下步骤操作:

  1. 开始->运行-> regsvr32%SystemRoot%\ System32 \ msxml3.dll

  2. 开始->运行-> regsvr32%SystemRoot%\ SysWOW64 \ msxml3.dll

  3. 清理项目。

  4. 重新启动Visual Studio。

    步骤1和2是从Besnik Kastrati帖子复制而来的。


0

我找到了这个答案,单击Ctrl + Alt + J单击顶部的(...),现在您可以从Browse,.Net或其他目录添加dll。单击OK按钮后,单击(添加到解决方案资源管理器中选定项目的引用中)这是绿色的加号“ +”按钮)


0

我已通过VS2019 16.2.4解决了此问题的所有不同步骤,但该问题仍然存在。我肯定希望MS可以解决此问题,因为这一问题已经持续了很长时间。

就在添加到对象浏览器上方之前,由于无法找到2019年的GAC,我无法确定此版本中的如何添加引用对话框。


0

尝试安装以前下载并安装在另一个项目中的nuget软件包时出现此错误。

单击工具>选项> NuGet软件包管理器下的清除所有NuGet缓存为我解决了此问题


同样,删除解决方案的packages文件夹中的内容可能会有所帮助。就我而言,我的文件夹中没有任何东西(可能已在某个位置签入),这导致了问题。
K0D4'4

0

使用VS GUI工具时,我遇到了同样的问题。我要解决的问题是删除了本地存储库,并将其从我的git源中删除了-谢谢git!:)

这可能并非在所有情况下都是解决方案。但是通过删除所有本地文件并重新编译,我能够使它再次运行!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.