【问题标题】:Error HRESULT E_FAIL has been returned from a call to a COM component对 COM 组件的调用已返回错误 HRESULT E_FAIL
【发布时间】:2023-03-15 23:36:01
【问题描述】:

在 Silverlight 4 应用程序中;这个错误是什么意思?:

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

这是一个非常普遍的错误。 VS 调试器在调试时不会指向错误的确切位置。

【问题讨论】:

    标签: visual-studio silverlight silverlight-4.0


    【解决方案1】:

    这是一个老问题,但我想我会给出我的答案,因为我通过谷歌搜索找到了这个线程来解决完全相同的问题。

    在我的例子中,我从 Web 复制了一些示例 XAML 以开始使用 Silverlight Toolkit 4。该示例 XAML 包含一个带有单击事件处理程序的简单按钮,该处理程序与我实际存在的任何处理程序无关后面的代码。一开始我并没有注意到这个简单的问题,因为编译器没有给我错误信息,我只是在运行时看到了上面的“Error HRESULT E_FAIL has been returned from a call to a COM component”信息。只有当我通过将示例 XAML 复制到一个没有任何其他内容的全新 Silverlight 应用程序中来隔离它时,真正的潜在问题在编译时才被发现。

    因此,如果您在运行时收到相同的错误消息,我的建议是仔细检查您的 XAML 是否存在您预期应该在编译时发现的任何错误,但由于某种原因最终成为上面提到的运行时错误。为了进行调试,您可以按照我的做法在没有其他内容的独立 Silverlight 应用程序中隔离导致错误的代码,然后看看您是否像我一样收到更有用的错误消息来指导您。

    HTH。

    【讨论】:

    • 这个问题不会有一个简单的答案。您需要仔细检查所有内容并寻找不一致之处。
    【解决方案2】:

    那里有很多解决方案,但这是唯一对我有用多次的解决方案。它已在 VS2012 VS2013 和 VS2015 上尝试过,我发现它对所有人都同样有效。只需按照以下步骤解决此问题

    第 1 步:关闭 Visual Studio
    第 2 步:删除 *.csproj.user*.suo 文件
    Step 3 : 重新打开VS,并尝试在调试模式下再次运行项目。

    注意:当多个用户在同一个工作时会发生这种情况 不同VS版本的项目不支持.suo文件 用于两个 VS 版本之间的往返。它包含信息 关于当前用户为他/她的 VS 工作选择了哪些设置 环境。

    【讨论】:

    • 就我而言,这个问题是在使用旧版本代码项目后出现的。它不是在第一次发生,而是在之后的一段时间内发生。 VS GUI 没有提供编辑选项,因此变得非常不安。程序仍然可以编译、运行和调试,只是Designer无法显示受影响的WinForm。我遵循了这些步骤,它解决了我的问题。 Visual Studio 2017 Community.suo文件位于:ProjectName\ .vs \ProjectName\ v15跨度>
    • 将 2019 添加到此修复的列表中 :)
    • 就我而言,我一直在尝试解析打开 LLVM 构建,但没有看到任何提到的 .user 或 .suo 文件。只需关闭重新打开的 MS VS 2019 即可解决此问题。谢谢!
    【解决方案3】:

    在我的情况下:

    我创建一个

    class MyControl : ContentControl {
    }
    

    默认情况下,该类不是公共的,XAML 无法加载它并引发异常

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

    只需将类的范围更改为公共,错误就会消失。

    希望对您有所帮助。

    附言。微软应该提供更多的信息,而不是仅仅抛出一个没有任何堆栈跟踪的神秘错误消息。

    【讨论】:

      【解决方案4】:

      我也有这个错误,我发现这个问题与没有将所有必需的程序集添加到您的项目有关。在我的例子中,我使用了一个依赖于 Silverlight Toolkit 的 UserControl,我没有添加这个参考。 我刚刚添加了参考,一切都解决了:)

      【讨论】:

        【解决方案5】:

        我在使用当前的 SL4 Telerik 控件时遇到了这个错误。 here 报告了一个类似的问题,并提供了一种解决方案......问题似乎出在 Expression Blend 管理控件缓存的方式上。

        【讨论】:

        • 这是错误的一个具体实例,但在 Silverlight 中的许多情况下都会发生,尤其是在合并字典的 XAML 出现问题时。
        【解决方案6】:

        这是我今天偶然发现的一种产生此错误的方法。我们在 XAML 中有以下按钮:

            <Button x:Name="button" Click="Button_Click" Content="Click me" />
        

        处理按钮的Click事件的事件处理器如下:

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                button.Margin = new Thickness(0, double.NaN, 0, 0);
            }
        

        当我单击按钮时,我收到上述错误。如果我将NaN 替换为PositiveInfinityNegativeInfinity,也会出现同样的错误。

        有趣的是,如果 Thickness 构造函数的第一个参数包含 NaN 而不是第二个,我会收到不同的错误消息。

        【讨论】:

          【解决方案7】:

          我因 XAML 问题而出现此错误。奇怪的是,我缺少 StyleMargin 属性使用的资源 - 这意味着应用程序运行良好,甚至 resharper 也只报告“提示”。

          一旦我清除了这些问题,我的“错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回”。消失了。正如其他人所说,这是一个模糊的错误,很难调试。在这种情况下,我继承了一个大型项目,其中包含 100 条不同严重程度的 VS 和 ReSharper 消息 - 在 Style 属性上缺少 StaticResource 并不是我检查的第一个地方!

          【讨论】:

            【解决方案8】:

            我的 xaml 页面中有此错误,并且没有语法错误。清理和重建项目解决了我的问题。仅供参考...

            【讨论】:

              【解决方案9】:

              IIS 应用程序池必须作为对 Team Foundation Server 具有查询访问权限的帐户运行。这解决了我的问题。

              【讨论】:

                【解决方案10】:

                这个问题的大部分原因与组件设计的依赖关系有关。 你只是在设计上面对这个问题。

                解决方案很简单,但需要时间 :) 清理项目并重新构建所有项目。当您再次进入设计时,您应该会看到一切正常!

                我希望这会有所帮助!

                如果您最近看到此异常,请尝试重新安装 silverlight sdk4。

                【讨论】:

                • 我认为 OP(作为我自己)在运行时出现问题,而不是在设计时出现问题。
                • 你是对的,它是一个通用错误。如果你做与设备相关的事情。也许在发布模式下运行项目可以解决这个问题。它有时会在调试模式下失败。只需使用 Ctrl+F5 运行它。正如您所说,这是一个非常常见的错误,其中一些在此处列出 msdn.microsoft.com/en-us/library/windows/desktop/…
                • 不,遗憾的是,我的发布代码失败了。这是在本机代码中的一些媒体播放中。
                • 有 0xFF2.... 之类的代码吗,Silverlight 只支持这里列出的一些格式,我也遇到过类似的问题,msdn.microsoft.com/en-us/library/cc189080%28v=vs.95%29.aspx
                • 这是一个非常随机的错误,我认为它只发生在一些内部启动和清理代码期间,而不是在实际播放期间。无论如何感谢您的帮助;)
                【解决方案11】:

                这是一个安全和权限问题。查看 IIS 并确保 Integrated Security 已打开。然后将应用程序保护级别设置为中(如果它很高,那么这可能是结果)。然后检查您的 Web.Config 文件。确保已关闭模拟。

                这应该会有所帮助。

                【讨论】:

                  【解决方案12】:

                  我在编码实时视频和音频时遇到了这个问题(使用Microsoft Expression),下一段代码随机抛出异常:

                  // Set bitrate
                  liveJob.OutputFormat.VideoProfile.Bitrate = new ConstantBitrate(2500);
                  
                  // Set Video size
                  liveJob.OutputFormat.VideoProfile.Size = new Size(320,240); 
                  

                  直到我发现第二行抛出异常,而第一行仍在另一个线程中运行!

                  当然,这是我的错 - 我在代码中调用了该方法,并且它也被 Click 事件调用...

                  【讨论】:

                    【解决方案13】:

                    我有这个例外并且发疯了。我建议您检查您最近是否安装了一个可能存在冲突命名空间项的组件。就我而言,我安装了 windows phone 工具包,其中的项目与 windows phone 上的 stock tool kit 名称相似。 我尽快从 Nuget 包管理器中卸载了它,一切恢复正常。

                    【讨论】:

                      【解决方案14】:

                      以下是在查询 Team Foundation Server 时尝试使用 MICROSOFT.TEAMFOUNDATION 库时为我们最终解决的问题:

                      1. 必须使用应用程序中引用的当前版本安装 Team Foundation Explorer。
                      2. MSDTC – 配置。 (请参阅下面的 DTC 配置)
                      3. IIS 应用程序池必须作为对 Team Foundation Server 具有查询访问权限的帐户运行
                      4. IIS 应用程序池必须作为在 IIS 服务器上具有 COM 访问权限的帐户运行(我们为此有一个专用服务器,因此我们将身份用户设置为本地服务器上的管理员)。
                      5. 防火墙必须关闭或配置为允许 COM 访问 DTC 服务。

                      DTC 配置----

                      1. 单击开始,单击运行,键入 dcomcnfg,然后单击确定打开组件服务。
                      2. 在控制台树中,单击展开 Component Services,单击展开 Computers,单击展开 My Computer,然后单击展开 Distributed Transaction Coordinator。
                      3. 右键单击本地 DTC,然后单击属性以显示本地 DTC 属性对话框。
                      4. 单击“安全”选项卡。
                      5. 在“安全设置”部分,单击“网络 DTC 访问”。
                      6. 在“客户端和管理”部分,选择“允许远程客户端”和“允许远程管理”。
                      7. 在事务管理器通信部分,选择允许入站和允许出站。
                      8. 在事务管理器通信部分,选择需要相互验证(如果所有远程计算机都运行 Windows Server 2003 SP1 或 Windows XP SP2 或更高版本),选择需要传入呼叫者验证(如果在群集中运行 MSDTC),或选择否如果某些远程计算机是 Windows Server 2003 SP1 或 Windows XP SP2 之前的版本,则需要身份验证。建议选择“无需身份验证”。

                      我希望这会有所帮助。

                      【讨论】:

                        【解决方案15】:

                        我的问题是缺少样式。我已经使用自定义画笔覆盖了一个控件模板,如下所示:

                        <Style x:Key="MyCustomStyle" TargetType="Thumb">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="Thumb">
                                        ....
                                        <TextBlock Foreground="{StaticResource MyCustomBrush}"
                        

                        并且缺少我对 MyCustomBrush 的定义,如下所示:

                        <SolidColorBrush x:Key="MyCustomBrush" Color="#FFAC0909"/>
                        

                        然后 BOOM,应用程序没有启动,我收到了 COM 错误消息。

                        【讨论】:

                          【解决方案16】:

                          好吧,我差点要吃掉我的电脑了.. 最后,我发现问题是我可能不小心删除了 XAML 页面中 Image 对象的一个​​ Margin 设置的一个参数,orz..

                          Margin="0,-20,0" 
                          

                          应该是

                          Margin="0,-20,0,0" 
                          

                          显然我没有意识到我曾经修改过 XAML 的任何内容,所以我已经“有一段时间”对背后的代码进行了故障排除..

                          幸运的是,我找到了这篇文章并重新检查了所有内容,包括 XAML 页面……那是……某事……

                          【讨论】:

                            【解决方案17】:

                            对我来说,我将其范围缩小为多年前从 CodePlex 下载的 SplitButton 控件。我已将解决方案从 Silverlight 4 升级到 Silverlight 5,并被此错误抨击。我可以通过将 XAML 注释到所有控件来缩小范围,然后一一取消注释,直到再次出现错误:

                            System.Reflection.TargetInvocationException 未被用户代码处理 Message=Exception 已被调用的目标抛出。 堆栈跟踪: 在 System.RuntimeMethodHandle.InvokeMethod(对象目标,对象 [] 参数,签名 sig,布尔构造函数) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] 参数,CultureInfo 文化,布尔型 skipVisibilityChecks) 在 System.Delegate.DynamicInvokeImpl(对象 [] 参数) 在 System.Delegate.DynamicInvoke(对象 [] 参数) 在 Homexaml_3.BindingOperation(对象 BindingState,Int32,动作) 内部异常: Message=Error HRESULT E_FAIL 已从对 COM 组件的调用中返回。 堆栈跟踪: 在 MS.Internal.XcpImports.CheckHResult(UInt32 小时) 在 MS.Internal.XcpImports.UIElement_Measure(UIElement 元素,Size availableSize) 在 System.Windows.UIElement.Measure(可用大小)

                            修复它的方法是手动删除过时的引用 System.Windows.Control 和 System.Windows.Controls.Toolkit,然后从 Silverlight 5 SDK 文件夹中重新添加它们。

                            如果它在几个月后再次发生,希望它能帮助某人(也帮助我!)。

                            【讨论】:

                              【解决方案18】:

                              我最近在 VS 2013 的 Silverlight 5 项目中收到此错误。以上都不适合我。奇怪的是,这是一个线程问题(通常我习惯于解释这个异常,如果我试图在后台线程上错误地创建 UIElements)。

                              使用 Dispatcher.BeginInvoke 包装将 UIElements 添加到 MainPage 的代码解决了该问题:

                               Dispatcher.BeginInvoke(() =>
                               {
                                    // your code
                               });
                              

                              【讨论】:

                                【解决方案19】:

                                大多数时候很难看出问题的确切位置,尤其是在 XAML 中。 找出失败的另一种方法是执行以下步骤

                                1. 复制它在 Visual Studio 的输出窗口中显示的异常。例子。 System.Reflection.TargetInvocationException
                                2. 单击调试 -> 异常。它会显示例外列表。
                                3. 点击“添加..”按钮。
                                4. 将步骤 1 中复制的异常粘贴到文本框中。在下拉列表中选择“Common Language Runtime exceptions”。
                                5. 单击“确定”按钮。选定的例外将突出显示。确保选中异常复选框。再次点击“确定”按钮关闭对话框。
                                6. 现在以调试模式运行应用程序。发生异常时应用程序中断。有时也在汇编模式下。
                                7. 此时你有两个选择,

                                  • 单击显示的异常屏幕的查看详细信息。深入研究 内部异常,直到你从哪里得到线索 起源。

                                  • 查看调用堆栈以查看您的哪一行代码导致 这个例外。这将为解决问题提供线索。

                                【讨论】:

                                  【解决方案20】:

                                  对我来说,这是一个 XAML 解析错误。在数据模板中,我在两个标签之间有一个额外的 S (可能是因为我按 S 而不是 CTRL+S kbd>)。比如……

                                  <DataTemplate>
                                     <Border/>s
                                  </DataTemplate>
                                  

                                  因此,我建议您在视图中查找格式不佳的 XML,从而在显示时导致此异常。

                                  【讨论】:

                                    【解决方案21】:

                                    在我的情况下,当我尝试将数据库导入 SSDT 项目时,但该数据库已经在项目中,但是是空的。我刚刚用Tools -&gt; SQL server -&gt; New schema comparsion 更新了我的项目。源 - 数据库,目标 - 项目。比较 - 更新。

                                    希望对某人有所帮助

                                    【讨论】:

                                      【解决方案22】:

                                      对于没有给出特定定义或跟踪的错误,尤其是与相对外部 Xaml 代码有关的错误,此错误似乎是“包罗万象”。

                                      在我的特殊情况下,命名空间似乎存在问题。我的 UserControl 在它自己的命名空间中(创造性地命名为“UserControls”)。我的页面位于它们自己的命名空间(“页面”)中。我想从我的 UserControl 中引用 Pages 命名空间中的枚举定义,所以我只是添加了一个 using 语句:using MySolution.Pages;。微不足道,我不想相信这是问题所在。但是当我删除该 using 语句并简单地在我的 UserControls 命名空间中创建枚举时,瞧,不再出现 HRESULT 错误,而且,作为额外的奖励,我在 UserControl 中定义的依赖属性,否则神秘地没有出现在 Xaml 智能感知中,突然出现并可以使用了。

                                      我怀疑在我的案例中造成这种情况的根本原因是某种循环引用问题。而且由于没有更具体的错误可用于将这些信息与我联系起来,它只是被改组为这个 HRESULT E_FAIL Com 错误。

                                      【讨论】:

                                        【解决方案23】:

                                        我通过删除 XAML 文件并通过添加新项目添加新文件来修复此错误。然后我粘贴了旧文件中的 XAML 代码。

                                        【讨论】:

                                          【解决方案24】:

                                          这是一个老问题,但就我而言,上述解决方案均无效。 我试图在 Visual Studio 2017 中更新 NuGet 包,但出现以下异常。

                                          update-package : Failed to add reference to 'System.Web.Razor'.
                                            Error HRESULT E_FAIL has been returned from a call to a COM component.
                                          

                                          事实上,其他 NuGet 命令(如 restore-package)失败并显示类似的异常消息。

                                          我发现包目录下缺少一些程序集,因此我删除了包目录并返回到 Visual Studio 2017。当我打开解决方案时,它要求我恢复包并在之后那个,我能够更新包。

                                          注意:在删除之前备份 package 目录。

                                          【讨论】:

                                            【解决方案25】:

                                            我在安装 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。我将 v140 用于 VS2015,将 v141 用于 VS2017。同时设置“始终使用”和“不警告”。

                                            【讨论】:

                                              【解决方案26】:

                                              如果有人遇到此问题,在控制台/Windows 应用程序中添加引用时,请按照以下步骤操作

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

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

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

                                              • 重启 Visualstudio

                                              参考 - https://developercommunity.visualstudio.com/t/add-a-reference-raise-error-error-hresult-e-fail-h/260196

                                              【讨论】:

                                                猜你喜欢
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 2021-08-18
                                                • 2019-07-03
                                                • 1970-01-01
                                                • 2013-09-09
                                                相关资源
                                                最近更新 更多