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.
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.
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.
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.
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 :)
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.
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 ...
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é!
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.
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.
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.
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.
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 ...
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.
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:
Configuration DTC ----
J'espère que ça aide.
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 ...
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
À 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.
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.
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.
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
});
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.
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
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.
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.
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.