【发布时间】:2023-03-15 23:36:01
【问题描述】:
在 Silverlight 4 应用程序中;这个错误是什么意思?:
“调用 COM 组件返回了错误 HRESULT E_FAIL。”
这是一个非常普遍的错误。 VS 调试器在调试时不会指向错误的确切位置。
【问题讨论】:
标签: visual-studio silverlight silverlight-4.0
在 Silverlight 4 应用程序中;这个错误是什么意思?:
“调用 COM 组件返回了错误 HRESULT E_FAIL。”
这是一个非常普遍的错误。 VS 调试器在调试时不会指向错误的确切位置。
【问题讨论】:
标签: visual-studio silverlight silverlight-4.0
这是一个老问题,但我想我会给出我的答案,因为我通过谷歌搜索找到了这个线程来解决完全相同的问题。
在我的例子中,我从 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。
【讨论】:
那里有很多解决方案,但这是唯一对我有用多次的解决方案。它已在 VS2012 VS2013 和 VS2015 上尝试过,我发现它对所有人都同样有效。只需按照以下步骤解决此问题
第 1 步:关闭 Visual Studio
第 2 步:删除 *.csproj.user 和 *.suo 文件
Step 3 : 重新打开VS,并尝试在调试模式下再次运行项目。
注意:当多个用户在同一个工作时会发生这种情况 不同VS版本的项目不支持
.suo文件 用于两个 VS 版本之间的往返。它包含信息 关于当前用户为他/她的 VS 工作选择了哪些设置 环境。
【讨论】:
在我的情况下:
我创建一个
class MyControl : ContentControl {
}
默认情况下,该类不是公共的,XAML 无法加载它并引发异常
对 COM 组件的调用已返回错误 HRESULT E_FAIL
只需将类的范围更改为公共,错误就会消失。
希望对您有所帮助。
附言。微软应该提供更多的信息,而不是仅仅抛出一个没有任何堆栈跟踪的神秘错误消息。
【讨论】:
我也有这个错误,我发现这个问题与没有将所有必需的程序集添加到您的项目有关。在我的例子中,我使用了一个依赖于 Silverlight Toolkit 的 UserControl,我没有添加这个参考。 我刚刚添加了参考,一切都解决了:)
【讨论】:
我在使用当前的 SL4 Telerik 控件时遇到了这个错误。 here 报告了一个类似的问题,并提供了一种解决方案......问题似乎出在 Expression Blend 管理控件缓存的方式上。
【讨论】:
这是我今天偶然发现的一种产生此错误的方法。我们在 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 替换为PositiveInfinity 或NegativeInfinity,也会出现同样的错误。
有趣的是,如果 Thickness 构造函数的第一个参数包含 NaN 而不是第二个,我会收到不同的错误消息。
【讨论】:
我因 XAML 问题而出现此错误。奇怪的是,我缺少 Style 和 Margin 属性使用的资源 - 这意味着应用程序运行良好,甚至 resharper 也只报告“提示”。
一旦我清除了这些问题,我的“错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回”。消失了。正如其他人所说,这是一个模糊的错误,很难调试。在这种情况下,我继承了一个大型项目,其中包含 100 条不同严重程度的 VS 和 ReSharper 消息 - 在 Style 属性上缺少 StaticResource 并不是我检查的第一个地方!
【讨论】:
我的 xaml 页面中有此错误,并且没有语法错误。清理和重建项目解决了我的问题。仅供参考...
【讨论】:
IIS 应用程序池必须作为对 Team Foundation Server 具有查询访问权限的帐户运行。这解决了我的问题。
【讨论】:
这个问题的大部分原因与组件设计的依赖关系有关。 你只是在设计上面对这个问题。
解决方案很简单,但需要时间 :) 清理项目并重新构建所有项目。当您再次进入设计时,您应该会看到一切正常!
我希望这会有所帮助!
如果您最近看到此异常,请尝试重新安装 silverlight sdk4。
【讨论】:
这是一个安全和权限问题。查看 IIS 并确保 Integrated Security 已打开。然后将应用程序保护级别设置为中(如果它很高,那么这可能是结果)。然后检查您的 Web.Config 文件。确保已关闭模拟。
这应该会有所帮助。
【讨论】:
我在编码实时视频和音频时遇到了这个问题(使用Microsoft Expression),下一段代码随机抛出异常:
// Set bitrate
liveJob.OutputFormat.VideoProfile.Bitrate = new ConstantBitrate(2500);
// Set Video size
liveJob.OutputFormat.VideoProfile.Size = new Size(320,240);
直到我发现第二行抛出异常,而第一行仍在另一个线程中运行!
当然,这是我的错 - 我在代码中调用了该方法,并且它也被 Click 事件调用...
【讨论】:
我有这个例外并且发疯了。我建议您检查您最近是否安装了一个可能存在冲突命名空间项的组件。就我而言,我安装了 windows phone 工具包,其中的项目与 windows phone 上的 stock tool kit 名称相似。 我尽快从 Nuget 包管理器中卸载了它,一切恢复正常。
【讨论】:
以下是在查询 Team Foundation Server 时尝试使用 MICROSOFT.TEAMFOUNDATION 库时为我们最终解决的问题:
DTC 配置----
我希望这会有所帮助。
【讨论】:
我的问题是缺少样式。我已经使用自定义画笔覆盖了一个控件模板,如下所示:
<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 错误消息。
【讨论】:
好吧,我差点要吃掉我的电脑了.. 最后,我发现问题是我可能不小心删除了 XAML 页面中 Image 对象的一个 Margin 设置的一个参数,orz..
Margin="0,-20,0"
应该是
Margin="0,-20,0,0"
显然我没有意识到我曾经修改过 XAML 的任何内容,所以我已经“有一段时间”对背后的代码进行了故障排除..
幸运的是,我找到了这篇文章并重新检查了所有内容,包括 XAML 页面……那是……某事……
【讨论】:
对我来说,我将其范围缩小为多年前从 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 文件夹中重新添加它们。
如果它在几个月后再次发生,希望它能帮助某人(也帮助我!)。
【讨论】:
我最近在 VS 2013 的 Silverlight 5 项目中收到此错误。以上都不适合我。奇怪的是,这是一个线程问题(通常我习惯于解释这个异常,如果我试图在后台线程上错误地创建 UIElements)。
使用 Dispatcher.BeginInvoke 包装将 UIElements 添加到 MainPage 的代码解决了该问题:
Dispatcher.BeginInvoke(() =>
{
// your code
});
【讨论】:
大多数时候很难看出问题的确切位置,尤其是在 XAML 中。 找出失败的另一种方法是执行以下步骤
此时你有两个选择,
单击显示的异常屏幕的查看详细信息。深入研究 内部异常,直到你从哪里得到线索 起源。
查看调用堆栈以查看您的哪一行代码导致 这个例外。这将为解决问题提供线索。
【讨论】:
对我来说,这是一个 XAML 解析错误。在数据模板中,我在两个标签之间有一个额外的 S (可能是因为我按 S 而不是 CTRL+S kbd>)。比如……
<DataTemplate>
<Border/>s
</DataTemplate>
因此,我建议您在视图中查找格式不佳的 XML,从而在显示时导致此异常。
【讨论】:
在我的情况下,当我尝试将数据库导入 SSDT 项目时,但该数据库已经在项目中,但是是空的。我刚刚用Tools -> SQL server -> New schema comparsion 更新了我的项目。源 - 数据库,目标 - 项目。比较 - 更新。
希望对某人有所帮助
【讨论】:
对于没有给出特定定义或跟踪的错误,尤其是与相对外部 Xaml 代码有关的错误,此错误似乎是“包罗万象”。
在我的特殊情况下,命名空间似乎存在问题。我的 UserControl 在它自己的命名空间中(创造性地命名为“UserControls”)。我的页面位于它们自己的命名空间(“页面”)中。我想从我的 UserControl 中引用 Pages 命名空间中的枚举定义,所以我只是添加了一个 using 语句:using MySolution.Pages;。微不足道,我不想相信这是问题所在。但是当我删除该 using 语句并简单地在我的 UserControls 命名空间中创建枚举时,瞧,不再出现 HRESULT 错误,而且,作为额外的奖励,我在 UserControl 中定义的依赖属性,否则神秘地没有出现在 Xaml 智能感知中,突然出现并可以使用了。
我怀疑在我的案例中造成这种情况的根本原因是某种循环引用问题。而且由于没有更具体的错误可用于将这些信息与我联系起来,它只是被改组为这个 HRESULT E_FAIL Com 错误。
【讨论】:
我通过删除 XAML 文件并通过添加新项目添加新文件来修复此错误。然后我粘贴了旧文件中的 XAML 代码。
【讨论】:
这是一个老问题,但就我而言,上述解决方案均无效。 我试图在 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 目录。
【讨论】:
我在安装 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。同时设置“始终使用”和“不警告”。
【讨论】:
如果有人遇到此问题,在控制台/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
【讨论】: