错误HRESULT E_FAIL已经从对COM组件的调用中返回
在Silverlight 4应用程序; 这个错误是什么意思?:
“错误HRESULT E_FAIL已从调用COM组件返回”。
这是一个非常普遍的错误。 在debugging时,VSdebugging器不会指向错误的确切位置。
这是一个古老的问题,但我想我会给我的答案,因为我发现这个线程谷歌search完全相同的问题。
就我而言,我从Web上复制了一些示例XAML以开始使用Silverlight Toolkit 4.该示例XAML包含一个简单的button,其中包含与事件处理程序无关的单击事件处理程序,这些处理程序实际上存在于我的代码中。 起初,我没有注意到这个简单的问题,因为编译器没有给我一个错误信息,我只是在运行时看到上面的错误HRESULT E_FAIL已经从一个COM组件调用返回。 只有当我将XAML的示例复制到一个全新的Silverlight应用程序中,而没有任何其他内容时,实际的底层问题才在编译时显示出来。
所以,如果你在运行时有相同的错误信息,那么我的build议是仔细检查你的XAML,以确定你在编译期间应该有什么错误,但是由于某些原因,以上。 为了进行debugging,您可以执行我所做的操作,并将独立Silverlight应用程序中导致错误的代码与没有其他内容的代码隔离开来,并查看是否像我一样获得更有用的错误消息来指导您。
HTH。
有很多解决scheme,但这是唯一的解决scheme,为我多次工作。它已经在VS2012 VS2013和VS2015,我发现它工作同样好所有。只需按照下面的步骤来解决这个问题
第1步:closuresVisual Studio
第2步:删除* .csproj.user和* .suo文件
第3步:重新打开VS,并尝试在debugging模式下再次运行项目。
注意:当多个用户使用不同VS版本的
.suo
文件在同一个项目上工作时,不支持在两个VS版本之间往返。它包含有关当前用户为他/她的VS工作环境select的设置的信息。
在我的情况下:
我创build一个
class MyControl : ContentControl { }
默认情况下,类不公开,XAML无法加载并抛出exception
错误HRESULT E_FAIL已经从对COM组件的调用中返回
只要将课程的范围改为公开,错误即可消失。
希望这个帮助。
PS。 微软应该提供更多的信息,而不只是抛出一个神秘的错误消息,没有任何堆栈跟踪。
我也有这个错误,我发现这个问题是关于没有添加所有请求的程序集到您的项目。 在我的情况下,我用一个UserControl与Silverlight工具包的依赖,我没有添加此引用。 我只是添加了参考和一切解决:)
我有这个错误使用当前的SL4 Telerik控件。 有一个类似的问题已经在这里报道了一个解决scheme…的种类。 这个问题似乎与Expression Blendpipe理控件caching的方式有关。
这是一个产生这个错误的方法,我今天偶然发现了这个错误。 我们在XAML中有以下button:
<Button x:Name="button" Click="Button_Click" Content="Click me" />
处理button的Click
事件的事件处理程序如下所示:
private void Button_Click(object sender, RoutedEventArgs e) { button.Margin = new Thickness(0, double.NaN, 0, 0); }
当我点击button,我得到上述错误。 如果我将NaN
replace为PositiveInfinity
或NegativeInfinity
,则会出现相同的错误。
有趣的是,如果Thickness
构造函数的第一个参数包含NaN
而不是第二个参数,我会得到不同的错误消息。
我从XAML的问题有这个错误。 奇怪的是,我遗失了Style
和Margin
属性使用的资源 – 这意味着应用程序运行良好,甚至resharper只报告一个“提示”。
一旦我清理了这些问题,我的“Error HRESULT E_FAIL已经从调用COM组件返回。 消失了。 正如其他人所说,这是一个模糊的错误,很难debugging。 在这种情况下,我inheritance了一个具有100个VS和ReSharper消息的不同程度的大项目 – 在Style
属性上缺lessStaticResource
并不是我检查的第一个地方!
我在我的xaml页面有这个错误,并没有语法错误。 清理和重build项目解决了我的问题。 仅供参考…
IIS应用程序池必须以具有对Team Foundation Server的查询访问权限的帐户运行。 这为我解决了这个问题。
这个问题的大部分原因都与组件devise相关。 你只是在devise上面对这个问题。
Soulution很容易,但需要时间:)清理项目,重build所有。 当你再次进入devise你应该看到一切都很好!
我希望这有帮助!
如果最近看到这个exception,请尝试重新安装silverlight sdk4。
这是一个安全和权限问题。 查看IIS并确保集成安全性处于开启状态。 然后将应用程序保护级别设置为中(如果它是高,那么这可能是结果)。 然后检查你的Web.Config文件。 确保模拟closures。
这应该有所帮助。
我在编码实时video和audio(使用Microsoft Expression )时遇到了这个问题,下一段代码随机抛出exception:
// Set bitrate liveJob.OutputFormat.VideoProfile.Bitrate = new ConstantBitrate(2500); // Set Video size liveJob.OutputFormat.VideoProfile.Size = new Size(320,240);
直到我发现第二行抛出exception,而第一行仍然在另一个线程中运行!
当然,这是我的错 – 我已经调用了代码中的方法,它也被Click事件调用…
我有这个例外,疯了。 我会build议你检查一下,如果你最近安装了一个可能有冲突的命名空间项目的组件。 在我的情况下,我安装了Windows手机工具包,其中有与Windows手机股票工具套件类似命名的项目。 尽快我从Nuget包pipe理器中卸载了这一切,一切恢复正常。
这里是最后解决这个问题,当我们尝试使用MICROSOFT.TEAMFOUNDATION库时查询Team Foundation Server:
- Team Foundation Explorer必须与应用程序中引用的正确版本一起安装。
- MSDTC – configuration。 (请参阅下面的DTCconfiguration)
- IIS应用程序池必须作为具有对Team Foundation Server的查询访问权限的帐户运行
- IIS应用程序池必须以在IIS服务器上具有COM访问权限的帐户运行(我们有专用的服务器,因此我们使身份用户成为本地服务器上的pipe理员)。
- 防火墙必须closures或configuration为允许COM访问DTC服务。
DTCconfiguration—-
- 单击开始,单击运行,键入dcomcnfg,然后单击确定以打开组件服务。
- 在控制台树中,单击以展开组件服务,单击以展开计算机,单击以展开我的电脑,然后单击以展开分布式事务处理协调器。
- 右键单击“本地DTC”,然后单击“属性”以显示“本地DTC属性”对话框。
- 单击安全选项卡。
- 在安全设置部分中,单击networkingDTC访问。
- 在“客户端和pipe理”部分中,select“允许远程客户端”和“允许远程pipe理”。
- 在“事务pipe理器通信”部分,select“允许入站并允许出站”。
- 在“事务pipe理器通信”部分中,select“需要相互身份validation”(如果所有远程计算机都运行Windows Server 2003 SP1或Windows XP SP2或更高版本),请select“要求传入呼叫者身份validation”(如果在群集中运行MSDTC)某些远程计算机是Windows Server 2003 SP1之前版本或Windows XP SP2之前的版本。 不要求authentication是推荐的select。
我希望这有帮助。
我的问题是一个缺less的风格。 我用自定义画笔覆盖了一个控制模板,如下所示:
<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对象的一个边距设置的一个参数,orz ..
Margin="0,-20,0"
这应该是
Margin="0,-20,0,0"
很明显,我没有意识到我曾经修改过XAML的任何东西,所以我一直在解决“稍后”的代码。
幸运的是,我发现这个post,并重新检查一切包括XAML页面..这是… …的东西…
对于我来说,我把它缩小到一个SplitButton控件,我从几年前就下载了CodePlex。 我已经将Silverlight 4的解决scheme升级到了Silverlight 5,并且遇到了这个错误。 我能够通过将XAML注释到所有控件中,然后将它们逐个注释掉,直到再次出现错误,从而缩小范围:
System.Reflection.TargetInvocationException由用户代码未处理 消息=exception已被调用的目标抛出。 堆栈跟踪: 在System.RuntimeMethodHandle.InvokeMethod(对象目标,对象[]参数,签名sig,布尔构造函数) (System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo culture,Boolean skipVisibilityChecks) 在System.Delegate.DynamicInvokeImpl(Object [] args) 在System.Delegate.DynamicInvoke(Object [] args) 在Homexaml_3.BindingOperation(Object BindingState,Int32,Action) 的InnerException: 消息=错误HRESULT E_FAIL已从调用返回到COM组件。 堆栈跟踪: 在MS.Internal.XcpImports.CheckHResult(UInt32小时) 在MS.Internal.XcpImports.UIElement_Measure(UIElement元素,大小availableSize) 在System.Windows.UIElement.Measure(大小可用大小)
什么修复它是手动删除过时的引用System.Windows.Control和System.Windows.Controls.Toolkit然后重新从Silverlight 5 SDK文件夹中添加它们。
如果在几个月后再次发生,希望它能帮助某人(并帮助我!)。
我最近在VS 2013中收到了一个Silverlight 5项目的错误。 以上都没有为我工作。 奇怪的是,这是一个线程问题(通常我习惯于解释这个例外,如果我想在后台线程错误地创buildUIElements)。
用Dispatcher.BeginInvoke包装我的代码添加UIElements到MainPage解决了这个问题:
Dispatcher.BeginInvoke(() => { // your code });
大多数时候,很难看到问题出现在哪里,尤其是在XAML中。 另一种方法来找出其失败的地方是执行以下步骤
- 复制它在Visual Studio的输出窗口中显示的exception。 例。 System.Reflection.TargetInvocationException
- 点击debugging – >例外。 它显示了例外列表。
- 点击“添加..”button。
- 将在步骤1中复制的例外粘贴到文本框中。 在下拉列表中select“公共语言运行时间例外”。
- 点击“确定”button。 所选的exception将被突出显示。 确保你检查了这个例外的checkbox。 再次点击“确定”buttonclosures对话框。
- 现在以debugging模式运行应用程序。 发生exception时应用程序中断。 有时也在汇编模式下。
-
在这个时候你有两个select,
-
点击显示的例外屏幕的查看详细信息。 深入研究内部的例外情况,直到你从原始的地方得到线索。
-
查看调用堆栈以查看您的哪一行代码导致此exception。 这将提供解决问题的线索。
-
对我来说,这是一个XAMLparsing错误。 在数据模板中,我有两个标签之间的额外S (可能是因为我按了S而不是CTRL + S )。 例如…
<DataTemplate> <Border/>s </DataTemplate>
所以,我build议你在视图中寻找格式不正确的XML,在显示时导致这个exception。
这个错误似乎是一个“万能的”错误,否则没有给出具体的定义或跟踪,特别是那些必须处理相对外部的Xaml代码。
在我的具体情况下,名称空间似乎有一个问题。 我的UserControl是在它自己的命名空间(创造性地命名为“UserControls”)。 我的页面在他们自己的名字空间(“页面”)。 我想在UserControl中引用Pages命名空间中的枚举定义,所以我只是添加了一个using语句: using MySolution.Pages;
。 琐碎,我不想相信这是问题。 但是,当我删除使用语句,只是在我的UserControls命名空间中创build枚举,瞧,没有更多的HRESULT错误,并作为额外的奖励,我在UserControl中定义的依赖属性,否则神秘地不显示在Xaml intellisense ,突然在那里,准备使用。
我怀疑在我的情况下,这是一个循环参考问题。 而且,由于没有更多的具体错误可以将这些信息与我联系起来,所以只需将其转换成HRESULT E_FAIL Com错误。
我通过删除XAML文件修复了这个错误,并从添加新项目中添加了一个新的错误。 然后,我粘贴了旧文件中的XAML代码。
在我的情况下,当我试图将数据库导入到SSDT项目,但是这个数据库已经在项目中,但是是空的。 我刚刚使用Tools -> SQL server -> New schema comparsion
更新我的项目。 源 – 数据库,目标 – 项目。 比较 – 更新。
希望有助于某人