web-dev-qa-db-fra.com

L'erreur HRESULT E_FAIL a été renvoyée d'un appel à un composant COM

Dans l'application Silverlight 4; Que signifie cette erreur?:

"L'erreur HRESULT E_FAIL a été renvoyée d'un appel à un composant COM."

C'est une erreur très générique. Le débogueur VS ne pointe pas vers l'emplacement exact de l'erreur lors du débogage.

44
pencilslate

C'est une sorte de vieille question, mais j'ai pensé que je donnerais ma réponse depuis que j'ai trouvé ce fil par Googling pour le même problème.

Dans mon cas, j'avais copié un exemple de XAML à partir du Web pour commencer avec Silverlight Toolkit 4. Cet exemple de XAML contenait un simple bouton avec un gestionnaire d'événements de clic qui ne se rapportait à aucun gestionnaire qui existait réellement dans mon code. Je n'ai pas remarqué ce problème simple au début, car le compilateur ne m'a pas donné de message d'erreur, je viens de voir le message "Erreur HRESULT E_FAIL a été renvoyé d'un appel à un composant COM" ci-dessus au moment de l'exécution. Ce n'est que lorsque j'ai isolé mon échantillon XAML en le copiant dans une toute nouvelle application Silverlight sans autre contenu que le véritable problème sous-jacent a été révélé au moment de la compilation.

Donc, si vous avez le même message d'erreur lors de l'exécution, mon conseil est de vérifier soigneusement votre XAML pour toutes les erreurs que vous attendiez qui auraient dû être détectées au moment de la compilation, mais qui pour une raison quelconque se sont terminées comme l'erreur d'exécution notée au dessus de. Pour déboguer, vous pouvez faire ce que j'ai fait et isoler le code à l'origine de l'erreur dans une application Silverlight autonome sans autre contenu, et voir si comme moi, vous obtenez un message d'erreur plus utile pour vous guider.

HTH.

19
Rachel

Il existe de nombreuses solutions, mais c'est la seule solution qui a fonctionné plusieurs fois pour moi.Elle a été essayée sur VS2012 VS2013 et VS2015, je trouve qu'elle fonctionne aussi bien pour tous.Il suffit de suivre les étapes ci-dessous pour résoudre ce problème

Étape 1: fermez Visual Studio
Étape 2: Supprimer les fichiers *. Csproj.user et *. Suo
Étape 3: rouvrez VS et essayez de réexécuter le projet en mode débogage.

REMARQUE: cette situation se produit lorsque plusieurs utilisateurs travaillent sur même projet avec différentes versions VS.suo Le fichier n'est pas pris en charge pour les allers-retours entre les deux versions VS. Il contient des informations sur les paramètres que l'utilisateur actuel a sélectionnés pour son environnement de travail VS.

11
Malik Khalil

Dans ma situation:

Je crée un

class MyControl : ContentControl {
}

Par défaut, la classe n'est pas publique et XAML ne peut pas la charger et lever l'exception

L'erreur HRESULT E_FAIL a été renvoyée d'un appel à un composant COM

Changez simplement la portée de la classe en public et l'erreur disparaîtra.

J'espère que cette aide.

PS. Microsoft devrait fournir plus d'informations que de simplement envoyer un message d'erreur mystère sans aucune trace de pile.

6
greensuisse

J'ai également eu cette erreur et j'ai trouvé que ce problème est lié au fait de ne pas avoir ajouté tous les assemblages requis à votre projet. Dans mon cas, j'utilisais un UserControl avec une dépendance avec le Silverlight Toolkit et je n'ai pas ajouté cette référence. Je viens d'ajouter la référence et tout est résolu :)

3
orellabac

Voici une façon de générer cette erreur, sur laquelle je suis tombé aujourd'hui. Nous avons le bouton suivant en XAML:

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

Le gestionnaire d'événements qui gère l'événement Click du bouton est le suivant:

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

Lorsque je clique sur le bouton, j'obtiens l'erreur susmentionnée. La même erreur se produit si je remplace NaN par PositiveInfinity ou NegativeInfinity.

Fait intéressant, j'obtiens un message d'erreur différent si le premier paramètre du constructeur Thickness contient le NaN au lieu du second.

2
Luke Woodward

J'ai eu cette erreur dans ma page xaml et il n'y avait aucune erreur de syntaxe. Le nettoyage et la reconstruction du projet ont résolu mon problème. fyi ...

2
ilke.uygun

J'ai eu cette erreur à cause de problèmes avec XAML. Ce qui est étrange, c'est qu'il me manquait des ressources utilisées par les attributs Style et Margin - ce qui signifie que l'application fonctionne correctement, et même la réaffectation ne signale qu'un "indice".

Une fois que j'ai résolu ces problèmes, mon "erreur HRESULT E_FAIL a été renvoyée d'un appel à un composant COM". disparu. Comme d'autres l'ont dit cependant, il s'agit d'une erreur vague, très difficile à déboguer. Dans ce cas, j'ai hérité d'un grand projet avec des centaines de messages VS et ReSharper avec une gravité variable - les attributs StaticResource on Style manquants n'étaient pas le premier endroit où j'ai vérifié!

2
Ben Parsons

Le pool d'applications IIS doit s'exécuter en tant que compte disposant d'un accès aux requêtes sur Team Foundation Server. Cela résout le problème pour moi.

2
abder

J'ai eu cette erreur en utilisant les commandes SL4 Telerik actuelles. Un problème similaire a été signalé ici avec une solution ... en quelque sorte. Le problème semble être lié à la façon dont Expression Blend gère le cache des contrôles.

2
IsolatedStorage

J'ai eu cette exception et je suis devenu fou. Je vous conseillerais de vérifier si vous avez récemment installé un composant pouvant contenir des éléments d'espace de noms en conflit. Dans mon cas, j'ai installé la trousse à outils Windows Phone qui contenait des éléments portant le même nom que la trousse à outils d'origine sur Windows Phone. Dès que j'ai désinstallé cela du gestionnaire de paquets Nuget, tout était revenu à la normale.

1
Sani Yusuf

Mon problème était un style manquant. J'avais remplacé un modèle de contrôle avec un pinceau personnalisé comme ceci:

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

et ma définition de MyCustomBrush manquait, comme ceci:

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

puis BOOM, l'application n'a pas démarré et j'ai reçu ce message d'erreur COM.

1
Rocklan

Eh bien, j'allais presque manger mon ordinateur .. Enfin, je découvre que le problème est que j'ai PEUT-ÊTRE PAR ACCIDENT supprimé un paramètre d'un paramètre de marge d'un objet Image dans la page XAML, orz ..

Margin="0,-20,0" 

qui devrait être

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

Évidemment, je ne savais pas que j'avais jamais modifié quoi que ce soit du XAML, donc j'ai dépanné le code derrière pendant "un petit moment" ..

Heureusement, j'ai trouvé ce post et revérifié tout, y compris la page XAML .. c'était ... quelque chose ...

1
Max Meng

Il s'agit d'un problème de sécurité et d'autorisations. Examinez le IIS et assurez-vous que la sécurité intégrée est activée. Définissez ensuite le niveau de protection des applications sur Moyen (s'il est élevé, cela peut être le résultat). Vérifiez ensuite votre fichier Web.Config. que l'emprunt d'identité est désactivé.

Cela devrait aider.

1
Legolas Greenleaf

Voici ce que nous avons finalement résolu ce problème lorsque nous essayions d'utiliser la bibliothèque Microsoft.TEAMFOUNDATION lors de l'interrogation de Team Foundation Server:

  1. Team Foundation Explorer doit être installé avec la version actuelle qui est référencée dans l'application.
  2. MSDTC - Configuration. (Voir la configuration DTC ci-dessous)
  3. Le pool d'applications IIS doit s'exécuter en tant que compte disposant d'un accès par requête au Team Foundation Server
  4. Le pool d'applications IIS doit s'exécuter en tant que compte disposant d'un accès COM sur IIS Server (nous avons un serveur dédié pour cela, nous avons donc fait de l'utilisateur d'identité un administrateur sur le serveur local).
  5. Le pare-feu doit être désactivé ou configuré pour autoriser l'accès COM au service DTC.

Configuration DTC ----

  1. Cliquez sur Démarrer, sur Exécuter, tapez dcomcnfg, puis cliquez sur OK pour ouvrir les services de composants.
  2. Dans l'arborescence de la console, cliquez pour développer les services de composants, pour développer les ordinateurs, pour développer le Poste de travail et pour développer le coordinateur de transactions distribuées.
  3. Cliquez avec le bouton droit sur DTC local, puis cliquez sur Propriétés pour afficher la boîte de dialogue Propriétés du DTC local.
  4. Cliquez sur l'onglet Sécurité.
  5. Dans la section Paramètres de sécurité, cliquez sur Accès DTC réseau.
  6. Dans la section Client et administration, sélectionnez Autoriser les clients distants et Autoriser l'administration à distance.
  7. Dans la section Communication de Transaction Manager, sélectionnez Autoriser les entrants et Autoriser les sortants.
  8. Dans la section Communication de Transaction Manager, sélectionnez Authentification mutuelle requise (si toutes les machines distantes exécutent Windows Server 2003 SP1 ou Windows XP SP2 ou supérieur), sélectionnez Authentification de l'appelant entrant requise (si vous exécutez MSDTC dans un cluster) ou sélectionnez Aucune authentification requise si certaines des machines distantes sont antérieures à Windows Server 2003 SP1 ou antérieures à Windows XP SP2. Aucune authentification requise est la sélection recommandée.

J'espère que ça aide.

1
MrCoincidence

J'ai eu ce problème pendant que j'encodais la vidéo et l'audio en direct (en utilisant Microsoft Expression ) et le morceau de code suivant lève l'exception au hasard:

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

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

jusqu'à ce que j'ai compris que la deuxième ligne lève l'exception tandis que la première est toujours en cours d'exécution dans un autre thread!

et bien sûr, c'était de ma faute - j'ai appelé la méthode dans le code, et elle a également été appelée par l'événement Click ...

1
itsho

La plupart du temps, il est difficile de voir où se situe exactement le problème, en particulier dans XAML. Une autre façon de savoir où son échec est d'effectuer les étapes suivantes

  1. Copiez l'exception affichée dans la fenêtre de sortie de Visual Studio. Exemple. System.Reflection.TargetInvocationException
  2. Cliquez sur Debug -> Exceptions. Il affiche la liste des exceptions.
  3. Cliquez sur le bouton "Ajouter ..".
  4. Collez l'exception copiée à l'étape 1 dans la zone de texte. Sélectionnez "Exceptions Common Language Runtime" dans la liste déroulante.
  5. Cliquez sur le bouton "Ok". L'exception sélectionnée sera mise en évidence. Assurez-vous de cocher la case par rapport à l'exception. Cliquez à nouveau sur le bouton "Ok" pour fermer la boîte de dialogue.
  6. Exécutez maintenant l'application en mode débogage. L'application s'arrête lorsque l'exception se produit. Parfois aussi en mode assembleur.
  7. À ce stade, vous avez deux options,

    • Cliquez sur Afficher les détails de l'écran d'exception affiché. Creusez dans les exceptions internes jusqu'à ce que vous obteniez un indice d'où son origine.

    • Affichez la pile des appels pour voir quel code de ligne de votre est à l'origine de cette exception. Cela fournira des indices pour résoudre le problème.

1
Ganapatsa

Pour moi, c'était une erreur d'analyse XAML. Dans un modèle de données, j'avais un supplément S entre deux balises (probablement parce que j'ai appuyé sur S au lieu de CTRL+S). Par exemple...

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

Donc, je vous suggère de rechercher du XML mal formaté dans la vue qui provoque cette exception lors de l'affichage.

1
Onosa

Pour moi, je l'ai réduit à un contrôle SplitButton que j'ai téléchargé il y a longtemps CodePlex. J'avais mis à niveau la solution de Silverlight 4 vers Silverlight 5 et j'ai été critiqué avec cette erreur. J'ai pu le réduire en commentant le XAML à tous les contrôles, puis en le commentant un par un jusqu'à ce que l'erreur réapparaisse:

 System.Reflection.TargetInvocationException n'a pas été gérée par le code utilisateur 
 Message = Une exception a été levée par la cible d'un appel. 
 StackTrace: 
 Sur System.RuntimeMethodHandle. InvokeMethod (Object target, Object [] arguments, Signature sig, Boolean constructor) 
 At System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object [] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
 sur System.Delegate.DynamicInvokeImpl (Object [] args) 
 sur System.Delegate.DynamicInvoke (Object [] args) 
 sur Homexaml_3.BindingOperation (Object BindingState, Int32, Action ) 
 InnerException: 
 Message = Erreur HRESULT E_FAIL a été renvoyé d'un appel à un composant COM. 
 StackTrace: 
 Sur MS.Internal.XcpImports.CheckHResult ( UInt32 hr) 
 Sur MS.Internal.XcpImports.UIElement_Measure (élément UIElement, taille a vailableSize) 
 sur System.Windows.UIElement.Measure (Size availableSize) 

Ce qui a résolu le problème était de supprimer manuellement les références obsolètes System.Windows.Control et System.Windows.Controls.Toolkit, puis de les rajouter du dossier Silverlight 5 SDK.

J'espère que cela aide quelqu'un (et m'aide!) Si cela se reproduit quelques mois plus tard.

1
Robert Koch

J'ai reçu cette erreur récemment dans VS 2013 pour un projet Silverlight 5. Rien de ce qui précède n'a fonctionné pour moi. Curieusement, c'était un problème de thread (normalement, je suis habitué à une exception qui explique cela si j'essaie de créer des UIElements sur un thread d'arrière-plan par erreur).

L'encapsulation de mon code qui ajoute des UIElements à la page principale avec Dispatcher.BeginInvoke a résolu le problème:

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

La plupart des raisons de ce problème de dépendance liées à la conception des composants. Vous venez d'affronter ce problème sur la conception.

Soulution est facile mais prend du temps :) Nettoyer le projet et tout reconstruire. Lorsque vous entrez à nouveau dans le desing, vous devriez voir que tout va bien!

J'espère que ça aide!

Si vous voyez cette exception récemment, essayez de réinstaller silverlight sdk4.

1
Davut Gürbüz

Dans mon cas, c'était le cas, lorsque j'ai essayé d'importer la base de données dans le projet SSDT, mais cette base de données était déjà dans le projet, mais était vide. Je viens de mettre à jour mon projet avec Tools -> SQL server -> New schema comparsion. Source - base de données, cible - projet. Comparer - mettre à jour.

J'espère que cela aide quelqu'un

0
Vlad Pulichev

C'est une vieille question mais dans mon cas, aucune des solutions ci-dessus n'a fonctionné. J'essayais de mettre à jour les packages NuGet dans Visual Studio 2017 mais j'obtenais l'exception suivante.

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

En fait, d'autres commandes NuGet comme restore-package échouaient avec un message d'exception similaire.

J'ai découvert que quelques assemblys manquaient sous le répertoire des packages, donc j'ai supprimé le répertoire des packages et je suis retourné dans Visual Studio 2017. Lorsque j'ai ouvert la solution, il m'a demandé de restaurer les packages et après cela, j'ai a pu mettre à jour les packages.

REMARQUE: Faites une copie de sauvegarde du répertoire avant de le supprimer.

0
Ashish Singh

Cette erreur semble être un "fourre-tout" pour les erreurs qui, autrement, ne reçoivent pas de définition ou de traçage spécifiques, en particulier celles qui ont à voir avec du code Xaml relativement externe.

Dans mon cas particulier, il semblait y avoir un problème avec les espaces de noms. My UserControl se trouve dans son propre espace de noms (nommé de manière créative "UserControls"). Mes pages se trouvent dans leur propre espace de noms ("Pages"). Je voulais référencer une définition d'énumération dans l'espace de noms Pages à partir de mon UserControl, j'ai donc simplement ajouté une instruction using: using MySolution.Pages;. Assez trivial, et je ne voulais pas croire que c'était le problème. Mais quand j'ai supprimé cette instruction using et simplement créé l'énumération dans mon espace de noms UserControls, le tour est joué, plus d'erreur HRESULT et aussi, en prime, mes propriétés de dépendance définies dans UserControl, qui autrement n'étaient mystérieusement pas affichées dans l'intellisense Xaml , étaient soudainement là et prêts à l'emploi.

Je soupçonne que la cause sous-jacente de cela dans mon cas était une sorte de problème de référence circulaire. Et puisqu'il n'y avait plus d'erreur spécifique disponible pour me relier ces informations, elles ont simplement été mélangées dans cette erreur HRESULT E_FAIL Com.

0
ouflak

J'ai corrigé cette erreur en supprimant le fichier XAML et en ajoutant un nouveau à partir d'ajout d'un nouvel élément. Ensuite, j'ai collé les codes XAML qui étaient là dans l'ancien fichier.

0
Saraf Talukder