错误HRESULT E_FAIL在调试时从调用COM组件VS2012返回

时间:2012-11-13 13:01:04

标签: visual-studio visual-studio-2012

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

  

“错误HRESULT E_FAIL已从调用COM组件返回”。

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

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

我可以将其缩小到以下

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

任何有想法的人?

35 个答案:

答案 0 :(得分:42)

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

但我找到了一个快速,简单且无痛的修复

在我的特定情况下,我删除了解决方案的suo文件(据我所知,只是存储信息,如IDE中打开的文件和东西,所以删除它没有真正的损害)。我的文件似乎已经损坏了(IDE不会记得重新启动时打开了哪些文件,它的大小为1.7meg,即使对于我的40项目解决方案来说也是如此,它很少会同时打开超过50个文件)。

总结:在VS关闭时删除.suo文件,修复了E_FAIL问题我正在设计模式下打开我的winforms文件。

编辑:

我最近不得不在VS2017中做到这一点,但由于另一个原因,它需要花费更长的时间来构建并花了5分钟来停止调试会话,删除那个讨厌的suo文件修复它,现在任何时候VS行为怪异删除SUO是我的第一个停靠港。

答案 1 :(得分:22)

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

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

答案 2 :(得分:5)

我想补充一点,我在WinForms应用中打开设计器文件时遇到此错误。我的问题是该项目中的一个参考文献引用了自己。显然这可能发生在这里提到

https://social.msdn.microsoft.com/Forums/office/en-US/00aede04-d8cd-4475-8114-4b4792261052/winforms-designer-error-hresult-efail-has-been-returned-from-a-call-to-a-com-component

我删除了引用,它工作正常。

答案 3 :(得分:4)

也许this page有帮助:

  

情景二:   创建或调试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重新构建缓存。

答案 4 :(得分:4)

卫生署!如果其他人在尝试连接到IIS网站时收到此错误。

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

尝试重新安装Visual Studio之前,就像我做的那样..可怕的错误消息..

答案 5 :(得分:4)

很抱歉重振死线,但我在VS2017上通过删除

中的项目模板缓存和项目模板缓存文件夹解决了这个问题
%appdata*\Local\Microsoft\VisualStudio\[BUILD]

然后通过

重置visual studio设置
Tools>Import and export settings>reset all settings

我也听说过关闭"所有项目的轻量级解决方案负载"可以帮忙。

答案 6 :(得分:2)

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

以下解决方案对我有用:

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

答案 7 :(得分:2)

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

我正在参与的项目。虽然VS2013并不关心,但VS2015并不喜欢这样,我得到了那个错误。删除引用后,错误消失了。我花了大约4个小时才发现......

答案 8 :(得分: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”

重新启动后,一切正常。

答案 9 :(得分:2)

这解决了我的问题:

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

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

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

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

答案 10 :(得分:1)

我写了一个简单的程序来打开不同的文件夹,同时点击一些特定的按钮。我将文件属性设置为" content"并且"复制如果更新"进行部署。因此,如果我在其他软件中安装了exe文件,它实际上会安装所有资源并运行程序。 所以,这就是我的计划。有时候如果我运行程序来检查它,有时会显示错误

  

" HRESULT E_FAIL已通过调用COM组件返回"

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

以下是解决方案:

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

  1. 从解决方案资源管理器中删除form1.vb(如果在开发过程中更改,则可能是其他名称)
  2. 在解决方案资源管理器中>右键单击>添加现有项目>浏览文件复制文件夹的原始文件Form1.vb(原始位置)
  3. 在新位置运行程序。它会起作用
  4. 此解决方案存在问题,如果您想添加内容并在运行程序后发现相同的错误,则必须再次将整个应用程序文件夹复制到另一个位置并按照上述步骤进行操作

答案 11 :(得分:1)

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

  • 通过进入

    打开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' 
    
  • 然后通过VS Cmd提示符(管理员模式)运行此gacutil命令:

    1. 导航到

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

答案 12 :(得分:1)

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

打开VS2017的Develop Command Prompt(确保您以管理员身份运行,否则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

答案 13 :(得分:1)

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

答案 14 :(得分:0)

我在安装VS2019之后遇到了这个错误,但是在尝试打开一个针对VS2015的大型解决方案(20个以上的项目)同时使用vcxproj和csproj项目时。 csproj全部加载正常,而vcxproj全部失败,并显示OP错误。删除.vs文件夹无效。

所做的工作是在“浏览数据库后备”设置下设置VC ++的“后备位置”。

Tools (menu)
-Options...
--Text Editor
---C/C++
---Advanced
----Browsing Database Fallback
-----Fallback Location

我将我的设置为D:\VC++\v16。我在VS2015中使用v140,在VS2017中使用v141的地方。还要设置“始终使用”和“不警告”。

答案 15 :(得分:0)

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

这可能不是所有情况下的解决方案。但是通过删除所有本地文件并重新编译,我得以使其再次正常工作!

答案 16 :(得分:0)

我遇到了这个问题从VS2017更新到VS2019

对我来说,该问题只是通过项目的deleting the .VC.db文件解决了。

答案 17 :(得分:0)

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

在工具>选项> NuGet软件包管理器下单击清除所有NuGet缓存

答案 18 :(得分:0)

根本原因: 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键就完成了!

答案 19 :(得分:0)

只需删除packages文件夹即可。

答案 20 :(得分:0)

就我而言,似乎是因为我隐藏了一些文件,但一些相关的窗口仍然打开。

关闭所有窗口并重建解决方案为我修复了它。

答案 21 :(得分:0)

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

在添加到“对象浏览器”之前,由于无法找到2019年的GAC,因此我无法计算出此版本中的“添加引用”对话框。

答案 22 :(得分:0)

不确定错误的确切复制步骤(从调用COM组件返回了HRESULT E_FAIL),但我的解决方案是:

  1. 关闭Visual Studio并通过“控制面板”修复它。
  2. 重启系统
  3. 重新启动后,错误消失了。

答案 23 :(得分:0)

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

答案 24 :(得分:0)

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

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

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

  3. 清理项目。

  4. 重新启动Visual Studio。

    第1步和第2步是从Besnik Kastrati帖子中复制的。

答案 25 :(得分:0)

我通过删除ComponentModelCache文件夹

修复了同样的问题
  1. 关闭Visual Studio(如果你还没有绝望的话)
  2. 打开文件资源管理器窗口并导航toyour AppData文件夹。你可以通过以下方式到达:
    1. 在搜索栏中输入%APPDATA%/..,然后按Enter
    2. 或者,导航至C:\Users\\AppData
  3. 进入Local\Microsoft\VisualStudio\<version>,Visual Studio 2013为12.0。
  4. 删除ComponentModelCache文件夹。
  5. 从这里开始:http://withmartin.net/how-visual-studios-component-model-cache-can-be-a-pain/

答案 26 :(得分:0)

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

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

答案 27 :(得分:0)

我的问题表现在打开Win10 appxmanifest文件(没有双关语意)。只需安装Windows 10工具和SDK(转到New-&gt; Project-&gt;选择Windows-&gt;安装工具)即可修复它。

答案 28 :(得分:0)

  

HRESULT E_FAIL已从调用COM组件返回

在我的情况下,这是因为我在我的解决方案中有不同的项目具有相同的GUID。 (项目是通过复制/粘贴创建的)

答案 29 :(得分:0)

我最近花了大约3个小时尝试在我在本地IIS上运行的ASP.NET应用程序上修复此问题。我指定了“覆盖应用程序根URL”,并使用结束正斜杠(/)(例如http://my.dev.com/)指定了URL。如果我保存了项目选项并重新进入,则会将覆盖的根网址显示为http://http://my.dev.com。一旦我删除了最后一个正斜杠,它开始表现良好,错误就消失了。

答案 30 :(得分:0)

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

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

答案 31 :(得分:0)

有时我们的TFS构建服务器会发生这种情况(Gated check in)。它是关于工作区文件夹。我不知道为什么但工作区文件夹访问有时会损坏。我正在解决的问题是删除TFS构建工作区并删除相关的工作区文件夹。 TFS构建机器然后为自己创建新的工作区,问题得到解决。

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

答案 32 :(得分:0)

解决问题的步骤:

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

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

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

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

5.选择Web.In Servers部分,确保选择了“Use Local IIS Web Server”。

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 Enterprise(版本6.1 - Build 7601:Service Pack 1)

答案 33 :(得分:-1)

我刚刚遇到了同样的问题。原来,Web属性表上的项目URL格式不正确。

我刚刚删除了端口号,忘记删除前面的冒号,并尝试运行:http://localhost:/XYZ

似乎许多不同的问题导致此错误消息。

答案 34 :(得分:-1)

我遇到了这个问题,因为我试图在SSDT 2017中从SSDT 2013(TFS)打开SSIS项目并测试Oracle Attunity Driver。在新的SSIS项目中,Attunity Driver可以正常工作,但是在升级的SSIS Project中,它将显示当我尝试测试连接时出现错误。解决方案是修复旧项目。