В приложении Silverlight 4; что означает эта ошибка?:
"Ошибка HRESULT E_FAIL была возвращена из вызова COM-компонента."
Это очень общая ошибка. Отладчик VS не указывает на точное местоположение ошибки при отладке.
В приложении Silverlight 4; что означает эта ошибка?:
"Ошибка HRESULT E_FAIL была возвращена из вызова COM-компонента."
Это очень общая ошибка. Отладчик VS не указывает на точное местоположение ошибки при отладке.
Это своего рода старый вопрос, но я решил, что дам свой ответ, так как нашел эту тему в Googling по той же самой проблеме.
В моем случае я скопировал образец XAML из Интернета, чтобы начать работу с Silverlight Toolkit 4. В этом примере XAML содержала простую кнопку с обработчиком событий click, которая не относилась к любому обработчику, который действительно существовал в моем код позади. Сначала я не заметил эту простую проблему, потому что компилятор не дал мне сообщение об ошибке, я только что увидел, что сообщение об ошибке "Ошибка HRESULT E_FAIL было возвращено из вызова COM-комьюнити" выше во время выполнения. Только когда я изолировал свой образец XAML, скопировав его в совершенно новое приложение Silverlight без какого-либо другого контента, что реальная основная проблема была обнаружена во время компиляции.
Итак, если у вас есть такое же сообщение об ошибке во время выполнения, я советую проверить ваш XAML, чтобы все ошибки, которые вы ожидали, должны были быть отобраны во время компиляции, но которые по какой-то причине оказались описанная выше ошибка времени выполнения. Чтобы отлаживать, вы можете сделать то, что я сделал, и изолировать код, вызывающий ошибку, в автономном приложении Silverlight без какого-либо другого контента, и посмотреть, как, как и я, вы получите более полезное сообщение об ошибке, которое поможет вам.
НТН.
Есть много решений, но это единственное решение, которое несколько раз работало для меня. Было проверено VS2012 VS2013 и VS2015, я считаю, что он работает одинаково хорошо для всех. Просто выполните следующие шаги, чтобы исправить эту проблему
Шаг 1: Закройте Visual Studio
Шаг 2. Удалите *.csproj.user и *. Suo файлы
Шаг 3. Повторно запустите VS и попробуйте снова запустить проект в режиме отладки.
ПРИМЕЧАНИЕ. Эта ситуация возникает, когда несколько пользователей, работающих с одинаковыми проект с различными версиями VS
.suo
не поддерживается для круглого отключения между двумя версиями VS.It содержит информацию о том, какие настройки выбрал текущий пользователь для его/ее работы VS окружающая среда.
В моей ситуации:
Я создаю
class MyControl : ContentControl {
}
По умолчанию класс не является общедоступным, и XAML не может его загрузить и исключить исключение
Ошибка HRESULT E_FAIL была возвращена из вызова COM-компонента
Просто измените область видимости класса и исчезните.
Надеюсь на эту помощь.
PS. Microsoft должна предоставлять больше информации, чем просто бросать сообщение о загадочной ошибке без какой-либо трассировки стека.
У меня также была эта ошибка, и я обнаружил, что эта проблема связана с тем, что не добавлены все необходимые сборки в ваш проект. В моем случае я использовал UserControl с параметром Silverlight Toolkit, и я не добавил эту ссылку. Я просто добавил ссылку и все решило:)
У меня была эта ошибка, используя текущие элементы управления SL4 Telerik. Аналогичная проблема была сообщена здесь с решением... рода. Проблема заключается в том, что 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 с различной степенью тяжести - отсутствующие StaticResource
атрибуты Style
не были отмечены мной первым!
У меня была эта ошибка на моей странице xaml и не было синтаксических ошибок. Уборка и реорганизация проекта решили мою проблему. FYI...
Пул приложений IIS должен запускаться как учетная запись, у которой есть запрос доступа к Team Foundation Server. Это исправляет проблему для меня.
Основная причина этой проблемы связана с зависимостью, зависящей от дизайна компонентов. Вы просто сталкиваетесь с этой проблемой при проектировании.
Soulution - это просто, но требуется время:) Очистите проект и перестройте все. Когда вы снова войдете в настройку, вы увидите, что все в порядке!
Надеюсь, это поможет!
Если вы недавно заметили это исключение, попробуйте переустановить silverlight sdk4.
Это проблема безопасности и разрешений. Изучите IIS и убедитесь, что Integrated Security включена. Затем установите уровень защиты приложений на средний (если он высок, это может быть результатом). Затем проверьте файл Web.Config. Удостоверьтесь, что олицетворение выключено.
Это должно помочь.
У меня была эта проблема, когда я кодировал видео и аудио в реальном времени (используя выражение Microsoft), а следующий фрагмент кода генерирует исключение случайно:
// Set bitrate
liveJob.OutputFormat.VideoProfile.Bitrate = new ConstantBitrate(2500);
// Set Video size
liveJob.OutputFormat.VideoProfile.Size = new Size(320,240);
пока не выясню, что вторая строка вызывает исключение, в то время как первый из них все еще работает в другом потоке!
и, конечно, это была моя ошибка - я вызвал метод в коде, и он также был вызван событием Click...
У меня было это исключение и я с ума сошел. Я бы посоветовал вам проверить, недавно ли вы установили компонент, который мог иметь конфликтующие элементы пространства имен. В моем случае я установил набор инструментов для телефона Windows, в котором были элементы, которые были аналогично названы с набором инструментов для инструментов на телефоне Windows. Asap я удалил это из диспетчера пакетов Nuget, все вернулось к норме.
Вот что НАКОНЕЧНО исправляло эту проблему для нас при попытке использовать библиотеку MICROSOFT.TEAMFOUNDATION при запросе Team Foundation Server:
Конфигурация DTC ----
Надеюсь, это поможет.
Для меня это была ошибка анализа синтаксиса XAML. В шаблоне данных у меня был дополнительный S между двумя тегами (вероятно, потому, что я нажал S вместо CTRL + S). Например...
<DataTemplate>
<Border/>s
</DataTemplate>
Итак, я бы предложил вам искать плохо отформатированный XML в представлении, который вызывает это исключение при отображении.
Моя проблема - отсутствующий стиль. Я переопределил шаблон управления с помощью специальной кисти:
<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.
Ну, я почти собирался съесть свой компьютер. Наконец, я выясняю, что проблема заключается в том, что я НЕ МОЖЕТ ИЗМЕНИТЬ АВАРИЙНЫЙ УДАЛИТЬ один параметр одного параметра Margin объекта Image на странице XAML, orz..
Margin="0,-20,0"
который должен быть
Margin="0,-20,0,0"
Очевидно, я не понял, что я когда-либо модифицировал что-либо из XAML, поэтому я немного исказил код за "немного".
К счастью, я нашел этот пост и перепроверял все, что включает в себя страницу XAML.. это было... что-то...
Для меня я сузил его до элемента управления SplitButton, который я загрузил CodePlex несколько веков назад. Я обновил решение от Silverlight 4 до Silverlight 5 и получил эту ошибку. Я смог сузить его, прокомментировав XAML всем элементам управления, а затем раскомментировал их один за другим, пока ошибка не возникнет снова:
System.Reflection.TargetInvocationException was unhandled by user code Message=Exception has been thrown by the target of an invocation. StackTrace: at 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) 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 has been returned from a call to a COM component. StackTrace: at MS.Internal.XcpImports.CheckHResult(UInt32 hr) at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize) at System.Windows.UIElement.Measure(Size availableSize)
Что исправлено, вручную удалили устаревшие ссылки System.Windows.Control и System.Windows.Controls.Toolkit, а затем повторно добавили их из папки SDK Silverlight 5.
Надеюсь, что это поможет кому-то (и поможет мне!), если это произойдет снова через несколько месяцев после дороги.
Недавно я получил эту ошибку в VS 2013 для проекта Silverlight 5. Ничто из этого не помогло мне. Как ни странно, это была проблема с потоками (обычно я использую исключение, объясняющее это, если я пытаюсь создать UIElements в фоновом потоке по ошибке).
Обертка моего кода, который добавляет UIElements к MainPage с Dispatcher.BeginInvoke, решил проблему:
Dispatcher.BeginInvoke(() =>
{
// your code
});
В большинстве случаев трудно понять, где именно проблема находится, особенно в XAML. Еще один способ узнать, где его отказ - выполнить следующие шаги.
На данный момент у вас есть два варианта:
Нажмите "Показать детали экрана исключения". Вкопаться внутренние исключения, пока вы не поймете, откуда происходящий.
Просмотрите стек вызовов, чтобы узнать, какой код строки вы вызываете это исключение. Это даст ключ к решению проблемы.
Эта ошибка, по-видимому, является "уловкой" для ошибок, которые в противном случае не получают определенного определения или трассировки, особенно тех, которые связаны с относительно внешним кодом Xaml.
В моем конкретном случае, казалось бы, проблема с пространствами имен. Мой UserControl находится в своем собственном пространстве имен (с творческим названием "UserControls" ). Мои страницы находятся в собственном пространстве имен ( "Страницы" ). Я хотел ссылаться на определение перечисления в пространстве имен Pages из моего UserControl, поэтому я просто добавил оператор using: using MySolution.Pages;
. Достаточно тривиально, и я не хотел верить, что это была проблема. Но когда я удалил эту инструкцию using и просто создал перечисление в моем пространстве имен UserControls, voila, больше не было ошибки HRESULT, а также в качестве дополнительного бонуса мои свойства зависимостей, определенные в UserControl, которые в противном случае таинственно не отображались в Xaml intellisense, внезапно были там и готовы к использованию.
Я подозреваю, что основной причиной этого в моем случае была какая-то проблема с круговой ссылкой. И поскольку не было более конкретной ошибки, чтобы связать эту информацию со мной, она просто перетасовалась в эту ошибку HRESULT E_FAIL Com.
Я исправил эту ошибку, удалив файл XAML и добавив новый из нового элемента. Затем я вставил коды XAML, которые были там в старом файле.
В моем случае это было, когда я попытался импортировать базу данных в проект SSDT, но эта база данных уже была в проекте, но была пуста. Я только что обновил свой проект с помощью Tools -> SQL server -> New schema comparsion
. Источник - база данных, целевой проект. Сравнить - обновить.
Надеюсь, что это поможет кому-то.