web-dev-qa-db-ja.com

COMコンポーネントの呼び出しからエラーHRESULT E_FAILが返されました

Silverlight 4アプリ。このエラーはどういう意味ですか?:

「COMコンポーネントの呼び出しからエラーHRESULT E_FAILが返されました。」

これは非常に一般的なエラーです。 VSデバッガーは、デバッグ時にエラーの正確な場所を指していません。

44
pencilslate

これはちょっと古い質問ですが、Googlingがまったく同じ問題についてこのスレッドを見つけたので、答えを出すと思いました。

私の場合、サンプルXAMLをWebからコピーして、Silverlight Toolkit 4を使い始めました。このサンプルXAMLには、実際にコードビハインドに存在するハンドラーとは関係のないクリックイベントハンドラーを備えたシンプルなボタンが含まれていました。コンパイラがエラーメッセージを表示しなかったため、最初はこの単純な問題に気付きませんでした。実行時に上記の「COMコンポーネントの呼び出しからエラーHRESULT E_FAILが返されました」というメッセージが表示されました。コンパイル時に実際の根本的な問題が明らかになったのは、他のコンテンツなしで真新しいSilverlightアプリケーションにコピーしてサンプルXAMLを分離したときだけです。

したがって、実行時に同じエラーメッセージが表示される場合、コンパイル時に検出されるはずだったはずのエラーについてXAMLを慎重に確認することをお勧めしますが、何らかの理由で実行時エラーが記録されます上記。デバッグするために、私がやったことを実行して、他のコンテンツのないスタンドアロンのSilverlightアプリでエラーの原因となっているコードを分離し、私に似たより役立つエラーメッセージが表示されるかどうかを確認できます。

HTH。

19
Rachel

そこには多くの解決策がありますが、これは私にとって数回働いた唯一の解決策です。

ステップ1:Visual Studioを閉じます
ステップ2:*。csproj.userおよび*。suoファイルを削除します
ステップ3:VSを再度開き、デバッグモードでプロジェクトを再度実行してください。

注:この状況は、複数のユーザーが同じプロジェクト異なるVSバージョン.suoファイルは、2つのVSバージョン間のラウンドトリップでサポートされていません。現在のユーザーが自分のVS作業環境用に選択した設定に関する情報が含まれています。

11
Malik Khalil

私の状況では:

私が作成します

class MyControl : ContentControl {
}

デフォルトでは、クラスはパブリックではなく、XAMLはそれをロードして例外をスローできません

COMコンポーネントの呼び出しからエラーHRESULT E_FAILが返されました

クラスのスコープをpublicに変更するだけで、エラーが消えます。

この助けを願っています。

PS。マイクロソフトは、スタックトレースなしで謎のエラーメッセージを投げるだけでなく、情報を提供する必要があります。

6
greensuisse

また、このエラーが発生しました。この問題は、必要なすべてのアセンブリをプロジェクトに追加していないことに関連していることがわかりました。私の場合、Silverlight Toolkitに依存するUserControlを使用していましたが、このリファレンスを追加していません。私はちょうど参照を追加し、すべてが解決しました:)

3
orellabac

このエラーを生成する方法の1つは、今日私が偶然見つけたものです。 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);
    }

ボタンをクリックすると、前述のエラーが表示されます。 NaNPositiveInfinityまたはNegativeInfinityに置き換えると、同じエラーが発生します。

興味深いことに、Thicknessコンストラクターの最初のパラメーターに2番目ではなくNaNが含まれている場合、別のエラーメッセージが表示されます。

2
Luke Woodward

Xamlページでこのエラーが発生しましたが、構文エラーはありませんでした。プロジェクトをクリーニングして再構築すると、問題が解決しました。 fyi ...

2
ilke.uygun

XAMLの問題からこのエラーが発生しました。奇妙なことは、Style属性とMargin属性で使用されるリソースが不足していることです。つまり、アプリは正常に実行され、再共有者でさえ「ヒント」のみを報告します。

これらの問題を解決したら、「COMコンポーネントの呼び出しからエラーHRESULT E_FAILが返されました。」消えた。他の人が言ったように、これは曖昧なエラーであり、デバッグが非常に困難です。この場合、さまざまな重大度のVSおよびReSharperメッセージが数百個ある大規模なプロジェクトを継承しました-StaticResource属性にStyle属性がないことは最初にチェックした場所ではありませんでした!

2
Ben Parsons

IIS App PoolはTeam Foundation Serverへのクエリアクセスを持つアカウントとして実行する必要があります。これにより、問題が修正されます。

2
abder

現在のSL4 Telerikコントロールを使用してこのエラーが発生しました。同様の問題が報告されました here with solution ... sort of。問題は、Expression Blendがコントロールのキャッシュを管理する方法にあるようです。

2
IsolatedStorage

私はこの例外を持っていて、夢中になりました。名前空間の項目が競合する可能性のあるコンポーネントを最近インストールしたかどうかを確認することをお勧めします。私の場合、Windows Phoneのストックツールキットと同じ名前のアイテムが含まれるWindows Phoneツールキットをインストールしました。 Asap Nugetパッケージマネージャーからこれをアンインストールしましたが、すべて正常に戻りました。

1
Sani Yusuf

私の問題はスタイルの欠落でした。次のようなカスタムブラシでコントロールテンプレートをオーバーライドしました。

<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エラーメッセージが表示されました。

1
Rocklan

まあ、私はほとんどコンピューターを食べようとしていました。最後に、XAMLページorzのImageオブジェクトのMargin設定の1つのパラメーターを削除したことが問題であることがわかりました。

Margin="0,-20,0" 

どちらか

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

明らかに、私はXAMLを変更したことがないことに気付いていなかったため、「しばらく」の背後にあるコードのトラブルシューティングを行ってきました。

幸いなことに、この投稿を見つけて、XAMLページを含むすべてのものを再確認しました。

1
Max Meng

これはセキュリティと権限の問題です。 IISを確認し、統合セキュリティがオンになっていることを確認します。次に、アプリケーション保護レベルを中に設定します(高すぎる場合、これが結果である可能性があります)。次に、Web.Configファイルを確認します。なりすましがオフになっていることを確認してください。

これが役立つはずです。

1

Team Foundation Serverを照会するときにMicrosoft.TEAMFOUNDATIONライブラリを使用しようとしたときに、この問題を最終的に修正したのは次のとおりです。

  1. Team Foundation Explorerは、アプリケーションで参照されている正しいバージョンでインストールする必要があります。
  2. MSDTC –構成。 (以下のDTC構成を参照)
  3. IISアプリケーションプールは、Team Foundation Serverへのクエリアクセスを持つアカウントとして実行する必要があります
  4. IISアプリプールは、IIS Server(このための専用サーバーを持っているため、ローカルサーバーのIDユーザーを管理者にした)で、COMアクセスを持つアカウントとして実行する必要があります。
  5. DTCサービスのCOMアクセスを許可するには、ファイアウォールをオフにするか、設定する必要があります。

DTC構成----

  1. [スタート]ボタンをクリックし、[ファイル名を指定して実行]をクリックして、dcomcnfgと入力し、[OK]をクリックしてコンポーネントサービスを開きます。
  2. コンソールツリーで、[コンポーネントサービス]、[コンピューター]、[マイコンピューター]、[分散トランザクションコーディネーター]の順にクリックして展開します。
  3. [ローカルDTC]を右クリックし、[プロパティ]をクリックして[ローカルDTCプロパティ]ダイアログボックスを表示します。
  4. [セキュリティ]タブをクリックします。
  5. [セキュリティ設定]セクションで、[ネットワークDTCアクセス]をクリックします。
  6. [クライアントと管理]セクションで、[リモートクライアントを許可する]および[リモート管理を許可する]を選択します。
  7. [トランザクションマネージャーの通信]セクションで、[受信を許可する]および[送信を許可する]を選択します。
  8. [トランザクションマネージャーの通信]セクションで、[相互認証が必要]を選択します(すべてのリモートマシンがWindows Server 2003 SP1またはWindows XP SP2以降を実行している場合)、[着信呼び出し認証が必要クラスタ)、または一部のリモートマシンがWindows Server 2003 SP1以前またはWindows XP SP2の場合、認証不要)を選択することをお勧めします。

これがお役に立てば幸いです。

1
MrCoincidence

Microsoft Expressionを使用して)ライブビデオとオーディオをエンコードしているときにこの問題が発生し、次のコードが例外をスローしますランダムに

// Set bitrate
liveJob.OutputFormat.VideoProfile.Bitrate = new ConstantBitrate(2500);

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

最初の行がまだ別のスレッドで実行されている間に、2行目が例外をスローすることが判明するまで!

そしてもちろん、それは私のせいでした-私はコードでメソッドを呼び出しましたが、クリックイベントによっても呼び出されました...

1
itsho

ほとんどの場合、特にXAMLで問題の正確な場所を確認することは困難です。その失敗を見つける別の方法は、次の手順を実行することです

  1. Visual Studioの出力ウィンドウに表示される例外をコピーします。例。 System.Reflection.TargetInvocationException
  2. [デバッグ]-> [例外]をクリックします。例外リストが表示されます。
  3. [追加]ボタンをクリックします。
  4. 手順1でコピーした例外をテキストボックスに貼り付けます。ドロップダウンリストで[共通言語ランタイムの例外]を選択します。
  5. 「OK」ボタンをクリックします。選択した例外が強調表示されます。例外に対してチェックボックスを必ずチェックしてください。ダイアログを閉じるには、もう一度「OK」ボタンをクリックしてください。
  6. 次に、アプリケーションをデバッグモードで実行します。例外が発生すると、アプリケーションは中断します。アセンブラーモードの場合もあります。
  7. この時点で、2つのオプションがあります。

    • 表示された例外画面の詳細を表示をクリックします。発生元からヒントが得られるまで、内部の例外を掘り下げてください。

    • コールスタックを表示して、この例外の原因となっている行のコードを確認します。これにより、問題を解決する手がかりが得られます。

1
Ganapatsa

私にとって、これはXAML解析エラーでした。データテンプレートには、余分な S 2つのタグの間(おそらく私が押したため S の代わりに CTRL+S)。例えば...

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

そのため、表示時にこの例外の原因となるビューで適切にフォーマットされていないXMLを探すことをお勧めします。

1
Onosa

私にとっては、何年も前にCodePlexからダウンロードしたSplitButtonコントロールに絞り込みました。ソリューションをSilverlight 4からSilverlight 5にアップグレードしましたが、このエラーで非難されました。 XAMLをすべてのコントロールにコメントアウトし、エラーが再び表示されるまでコメントを1つずつコメント解除することで、それを絞り込むことができました。

 System.Reflection.TargetInvocationExceptionはユーザーコードによって処理されませんでした
 Message =例外は呼び出しのターゲットによってスローされました。
 StackTrace:
 at System.RuntimeMethodHandle。 InvokeMethod(Object target、Object [] arguments、Signature sig、Boolean constructor)
 at System.Reflection.RuntimeMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、Binderバインダ、Object [] parameters、CultureInfo culture、Boolean skipVisibilityChecks) 
 at System.Delegate.DynamicInvokeImpl(Object [] args)
 at System.Delegate.DynamicInvoke(Object [] args)
 at Homexaml_3.BindingOperation(Object BindingState、Int32、Action )
 InnerException:
 Message = Error HRESULT E_FAILがCOMコンポーネントの呼び出しから返されました。
 StackTrace:
 at MS.Internal.XcpImports.CheckHResult( UInt32 hr)
 at MS.Internal.XcpImports.UIElement_Measure(UIElement要素、サイズa vailableSize)
 at System.Windows.UIElement.Measure(Size availableSize)

修正したのは、古い参照System.Windows.ControlとSystem.Windows.Controls.Toolkitを手動で削除してから、Silverlight 5 SDKフォルダーからそれらを再度追加したことです。

数か月後に再び発生する場合、それが誰かを助ける(そして私を助ける!)ことを願っています。

1
Robert Koch

Silverlight 5プロジェクトのVS 2013で最近このエラーを受け取りました。上記のどれも私にとってはうまくいきませんでした。奇妙なことに、これはスレッドの問題でした(通常、バックグラウンドスレッドで誤ってUIElementを作成しようとした場合、これを説明する例外に慣れています)。

Dispatcher.BeginInvokeを使用してMainElementにUIElementsを追加するコードをラップすると、問題が解決しました。

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

この問題の理由のほとんどは、コンポーネント設計に依存する依存関係に関連しています。設計上のこの問題に直面するだけです。

解決は簡単ですが、時間がかかります:)プロジェクトをクリーンアップし、すべてを再構築します。デザインをもう一度入力すると、すべてが正常に表示されます。

これがお役に立てば幸いです!

この例外が最近発生した場合は、silverlight sdk4を再インストールしてください。

1
Davut Gürbüz

私の場合、データベースをSSDTプロジェクトにインポートしようとしましたが、このデータベースはすでにプロジェクトにありましたが、空でした。プロジェクトをTools -> SQL server -> New schema comparsionで更新しました。ソース-データベース、ターゲット-プロジェクト。比較-更新。

それが誰かに役立つことを願って

0
Vlad Pulichev

これは古い質問ですが、私の場合、上記の解決策はどれもうまくいきませんでした。 NuGetパッケージを更新しようとしていた Visual Studio 2017で、次の例外が発生していました。

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

実際、restore-packageなどの他のNuGetコマンドは、同様の例外メッセージで失敗していました。

パッケージディレクトリの下にいくつかのアセンブリが欠落していることを発見したため、パッケージディレクトリを削除に戻し、Visual Studio 2017に戻りました。ソリューションを開くと、パッケージを復元するように求められ、その後、パッケージを更新できました。

注:削除する前にpackageディレクトリのバックアップを作成してください。

0
Ashish Singh

このエラーは、特定の定義やトレースが与えられていないエラー、特に比較的外部のXamlコードに関係するエラーの「キャッチオール」のようです。

私の特定のケースでは、名前空間に問題があるように見えました。私のUserControlは、独自の名前空間(「UserControls」という名前)にあります。マイページは独自の名前空間(「ページ」)にあります。 UserControl内からPages名前空間の列挙定義を参照したいので、usingステートメントを追加しました:using MySolution.Pages;。些細なことで、これが問題だとは信じたくありませんでした。しかし、そのusingステートメントを削除して、UserControls名前空間に列挙型を作成すると、ほら、HRESULTエラーがなくなり、追加のボーナスとして、UserControlで定義された依存関係プロパティが作成されました。 、突然そこにあり、使用する準備ができました。

私の場合、これの根本的な原因は何らかの循環参照の問題であると思われます。そして、その情報を関連付けるための特定のエラーがなかったため、このHRESULT E_FAIL Comエラーにシャッフルされました。

0
ouflak

このエラーを修正するには、XAMLファイルを削除し、新しいアイテムの追加から新しいファイルを追加します。次に、古いファイルにあるXAMLコードを貼り付けました。

0
Saraf Talukder