System.BadImageFormatException в UWP с пакетом моста рабочего стола WPF - PullRequest
2 голосов
/ 08 июля 2019

Я полностью и подробно описал проблему и вопрос в этой теме System.NullReferenceException в AppServiceResponse и System.BadImageFormatException для UWP с пакетом моста рабочего стола WPF , но до сих пор не найден ответ, что может вызвать это отказ.

Ссылка на тему Центр разработки Windows выше описывает сборку, показывает весь использованный код с примерами, включая попытки решить проблему, и другие подробности. Таким образом, я буду помещать только базовую часть задачи в эту тему, чтобы избежать перегрузки текста в посте, и сосредоточусь только на System.BadImageFormatException , что вызывает App.Connection null в Windows Проект пакета приложений с подключением из UWP к WPF приложение, созданное в соответствии с UWP с расширением рабочего стола - часть 3, урок (отправка запроса на рабочий стол) расширение, считывание значений ключа реестра и отправка запроса с расширения рабочего стола в UWP, обработка запросов из кода рабочего стола).

Я пытался исправить это по-разному (также описано выше), но не могу найти никакой причины, по крайней мере, чтобы узнать, где искать проблему, возможно, я что-то упустил, но я не могу найти связанные полезные ответы где угодно в интернете

Это сообщение, но System.Runtime.WindowsRuntime.dll уже в ссылках:

System.BadImageFormatException HResult = 0x80131058 Сообщение = Возможно не загружать файл или сборку 'System.Runtime.WindowsRuntime, Версия = 4.0.10.0, Культура = нейтральная, PublicKeyToken = ... 'или одна из его зависимостей. Ссылочные сборки не должны быть загружены для выполнение. Они могут быть загружены только в загрузчике только для отражения контекст. (Исключение из HRESULT: 0x80131058) Source = WpfApp1
StackTrace: в WpfApp1.MainWindow.d__4.MoveNext () в C: \ Users \ User \ Desktop \ UWP \ App \ WpfApp1 \ MainWindow.xaml.cs: линия 58 в System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start [TStateMachine] (TStateMachine & StateMachine) в WpfApp1.MainWindow.InitializeAppServiceConnection () в WpfApp1.MainWindow..ctor () в C: \ Users \ User \ Desktop \ UWP \ App \ WpfApp1 \ MainWindow.xaml.cs: линия 37 Внутреннее исключение 1: BadImageFormatException: невозможно загрузить ссылку сборка для исполнения.

Любой совет, руководство или пример будут очень полезны

РЕДАКТИРОВАТЬ 1: ************************************** ************************************************** **********

Я попробовал все эти комбинации ниже двумя способами Отладка и Релиз , а также изменил «Настройки компилятора» платформы решений из строки меню цели VS из «Любой ЦП». »До« X86 »и наоборот, как показано в System.BadImageFormatException: не удалось загрузить файл или сборку [дубликаты] и из Solution->Properties->Configuration Properties->Configuration->Project contexts, а также из Project->Properties->Build->Platform target, но функциональность и ошибка одинаковы происходит во всех случаях:

Текущий Свойства конфигурации :

Console Launcher - AnyCPU
UWP - x86
Package - x86
WPF - AnyCPU
WinForms - AnyCPU

Установите все приложения Solution на x86:

Console Launcher - x86
UWP - x86
Package - x86
WPF - x86
WinForms - x86

или x64:

Console Launcher - x64
UWP - x64
Package - x64
WPF - x64
WinForms - x64

выполняет те же результаты по сценарию:

Уроки Часть 1 «Запуск WinForms из UWP» и Часть 2 «Передача параметров» работает успешно, запускает приложение, отправляет параметры с загрузкой WPF или WinForms .

Сценарии из урока Часть 3 результаты с той же ошибкой, InitializeAppServiceConnection(); выбросы System.BadImageFormatException с прямой отладкой, попытка запустить WPF или WinForms из UWP , ничего не делает с запрошенным приложением, просто показывает Console Launcher на секунду, без каких-либо сообщений и Вызывает код рабочего стола для чтения reg key выдает то же System.NullReferenceException

Setup все приложения в AnyCPU, кроме UWP , в котором путь отладки бина отсекается, поскольку в раскрывающемся меню целей платформы из свойств решения или приложения включены только x64, x86, ARM, ARM64

Console Launcher - AnyCPU
UWP - x86 
Package - AnyCPU
WPF - AnyCPU
WinForms - AnyCPU

броски:

Код серьезности Описание Состояние подавления строки файла проекта Ошибка MSB3270 Произошло несоответствие между архитектурой процессора проекта строится "x86" и архитектура процессора ссылка "C: \ Users \ User \ Desktop \ UWP_BD \ UWP_BD \ Launcher \ Bin \ Debug \ Launcher.exe", "AMD64". Это несоответствие может привести к сбоям во время выполнения. Пожалуйста примите к сведению изменение целевой архитектуры процессора вашего проекта через Диспетчер конфигурации, чтобы выровнять архитектуры процессора между вашим проектом и ссылками, или взять зависимость от ссылки с архитектурой процессора, которая соответствует целевой Процессорная архитектура вашего проекта. Пакет C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Community \ MSBuild \ Current \ Bin \ Microsoft.Common.CurrentVersion.targets 2106

и

Код серьезности Описание Состояние подавления строки файла проекта Предупреждение Элемент 'PropertyGroup' в пространстве имен 'http://schemas.microsoft.com/developer/msbuild/2003' недействителен дочерний элемент 'WapProjPath' в пространстве имен http://schemas.microsoft.com/developer/msbuild/2003'. Список ожидаемые возможные элементы: 'Property, VisualStudioVersion, MinimumVisualStudioVersion, AdditionalFileItemNames, AllowUnsafeBlocks, AppConfigForCompiler, ApplicationIcon, ApplicationRevision, ApplicationVersion, AppDesignerFolder, AspNetConfiguration, AspNetCoreHostingModel, AspNetCoreModuleName, AssemblyKeyContainerName, AssemblyKeyProviderName, AssemblyName, AssemblyOriginatorKeyFile, AssemblyOriginatorKeyFileType, AssemblyOriginatorKeyMode, AssemblyType, AutoGenerateBindingRedirects, AutorunEnabled, BaseAddress, BootstrapperComponentsLocation, BootstrapperComponentsUrl, BootstrapperEnabled, CharacterSet, CheckForOverflowUnderflow, CLRSupport, UseDebugLibraries, CodePage, Configuration, ConfigurationName, ConfigurationOverrideFile, CreateDesktopShortcut, CreateWebPageOnPublish, CurrentSolutionConfigurationContents, DebugSecurityZoneURL, DebugSymbols, DebugType, DefaultClientScript, DefaultHTMLPageLayout, DefaultTargetSchema, DefineConstants, DefineDebug, DefineTrace, DelaySign, DisableLangXtns, DisallowUrlActivation, CodeAnalysisAd .... Пакет C: \ Users \ Пользователь \ Рабочий стол \ UWP_BD \ UWP_BD \ Package \ Package.wapproj 49

и x64:

Console Launcher - AnyCPU
UWP - x64 
Package - AnyCPU
WPF - AnyCPU
WinForms - AnyCPU

Код серьезности Описание Состояние подавления строки файла проекта Ошибка MSB3270 Произошло несоответствие между архитектурой процессора проекта строится "MSIL" и процессорная архитектура ссылка "C: \ Users \ User \ Desktop \ UWP_BD \ UWP_BD \ UWP_Control \ Bin \ x64 \ Debug \ UWP_Control.exe", "AMD64". Это несоответствие может привести к сбоям во время выполнения. Пожалуйста примите к сведению изменение целевой архитектуры процессора вашего проекта через Диспетчер конфигурации, чтобы выровнять архитектуры процессора между вашим проектом и ссылками, или взять зависимость от ссылки с архитектурой процессора, которая соответствует целевой Процессорная архитектура вашего проекта. Пакет C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Community \ MSBuild \ Current \ Bin \ Microsoft.Common.CurrentVersion.targets 2106

Я не уверен, может быть, мне следует изменить Минимальная версия на Anniversary Edition или Windows 10 (10.0; Build 10214) с созданием UWP , по умолчанию Windows 10 (10.0; сборка 10586) :

enter image description here

РЕДАКТИРОВАТЬ 2: ************************************** ************************************************** **********

Я использую Windows 10 Pro 64-bit OS, x64-basesd processor с Visual Studio 2019 Version 16.1.4, Target Framework: .NET Framework 4.7.2 Version 4.7.03056, Microsoft.NETCore.Universal Windows Platform 6.2.8 Путь к папке C:\Program Files (x86)\Microsoft SDKs\Windows включает в себя папки: v7.0A, v8.1, v8.1A, v10.0A

в .csproj:

 <TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.14393.0</TargetPlatformVersion>
    <TargetPlatformMinVersion>10.0.14393.0</TargetPlatformMinVersion>
    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>

Я получил ту же ошибку System.BadImageFormatException , если я изменил Минимальная версия на Windows 10 AnniversaryРедакция (10.0; сборка 14393) такая же, как для Целевая версия , с предыдущей и новой сборкой без Часть 1 и Часть 2 код.

Также я следовал предложению Роя Ли в Исключение System.NullReferenceException в AppServiceResponse и System.BadImageFormatException для UWP с пакетом моста рабочего стола WPF в Центр разработки Windows , «Чтобы создать более простую демонстрацию для воспроизведения проблемы» .Итак, я создал новый пакет только с UWP и WPF в соответствии только с UWP с расширением рабочего стола - часть 3 с UWP_FullTrust_3 .

В предыдущей сборке я пропустил SingleInstance.cs в WPF приложении, но с включением этого кода в предыдущую или новую сборку (без передачи параметра «Запуск приложения» и «Передача»"), выдает ошибку:

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS0017 В программе определено более одной точки входа.Скомпилируйте с / main, чтобы указать тип, содержащий точку входа.FullTrust C: \ Users \ Пользователь \ Рабочий стол \ UWP_BD2 \ Solution1 \ FullTrust \ SingleInstance.cs 57 Актив

в этой части кода:

[STAThread]
public static void Main(string[] args)
{
    SingleInstanceManager manager = new SingleInstanceManager();
    manager.Run(args);
} 

ПРАВКА 3: **************************************************************************************************

Итак, для Windows 10 Pro 64-bit OS, Version 1803 (OS Build 17134.829) подходящая целевая версия должна быть 17134, я не уверен насчет минимальной версии:

enter image description here

Я обновил Windows всего несколько часов назад.Что-то идет не так в меню Targets с созданием Windows Application Package Project или UWP,, который не содержит 17134, с более высокой версией, я получил это сообщение:

enter image description here

По какой-то причине меню выбора цели не содержит 17134, и оно также пропало для Windows Application Package Project:

enter image description here

РЕДАКТИРОВАТЬ 4: **************************************************************************************************

Я установил SDK версии 17134 и выбрал 17134 для целевой версии с проектом пакета приложений Windows и созданием UWP.

Я добавил код, ссылки, настройки, ноЯ получил ту же ошибку!Я не уверен, что смогу это исправить.Возможно завершить тестовый проект, с реальным кодом поможет.

Итак, вот полное решение хранилище UWP_desktop_bridge .Это UWP и Console Launcher для WPF, основанные на Часть 1 , Часть 2 , Часть 3 из UWP-FullTrust урок Stefan Wick MSFT

Без InitializeAppServiceConnection(); сценариев из Часть 1 , Часть 2 работает, но с включением InitializeAppServiceConnection(); в WPF InitializeComponent();чтобы получить функциональность Part 3 , я получил:

System.BadImageFormatException HResult = 0x80131058 Сообщение = Не удалось загрузить файл или сборку 'System.Runtime.WindowsRuntime, Version = 4.0.10.0, Культура = нейтральная, PublicKeyToken = ... 'или одна из ее зависимостей.Ссылочные сборки не должны загружаться для выполнения.Они могут быть загружены только в контексте загрузчика только для отражения.(Исключение из HRESULT: 0x80131058) Source = WpfApp1
StackTrace: в WpfApp1.MainWindow.d__4.MoveNext () в C: \ Users \ Пользователь \ Desktop \ UWP_desktop-bridge \ Solution1 \ WpfApp1 \ MainWindow.xaml.cs:59 в System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start [TStateMachine] (TStateMachine & stateMachine) в WpfApp1.MainWindow.InitializeAppServiceConnection () в WpfApp1.MainWindow..ctor \ \ \ Udesk_WD_Windows \ Users \ \ \ Users \ Up \ Users_Play_Windows \ Users \ Users_Windows \ Users_Play_P \\ WpfApp1 \ MainWindow.xaml.cs: строка 38 Внутреннее исключение 1: BadImageFormatException: невозможно загрузить эталонную сборку для выполнения.

и то же самое с SingleInstance.cs, если используется эта часть кода:

[STAThread]
public static void Main(string[] args)
{
    SingleInstanceManager manager = new SingleInstanceManager();
    manager.Run(args);
}

Код серьезности Описание Ошибка состояния подавления строки файла проекта Программа CS0017 имеет более одной определенной точки входа. Компилировать с / main для указания типа, который содержит точку входа.

Это такая же функциональность и отказ, как и в моих предыдущих проектах.

РЕДАКТИРОВАТЬ 5 : ************************************** ************************************************** **********

В настоящее время я тщательно создал сборку с копированием и вставкой на основе демоверсии ZhuMingHao / AppSerViceTest в ответе Нико Чжу - MSFT на связанный вопрос Отправить args распознавания речи. Результат в качестве параметра в пакете UWP desktop-bridge :

Отладка загружает UWP и WPF успешно. При нажатии на кнопку Click с UWP AppSerViceTest / AppServiceTest / MainPage.xaml.cs :

У меня такое же исключение:

System.NullReferenceException: 'Ссылка на объект не установлена ​​на экземпляр объекта.

Нажав на кнопку WPF Send Message, он просто закрывает приложение WPF, UWP StatusBlock и InfoBlock ничего не показывает.

Прямая отладка WPF и нажатие кнопки Send message, создает другое содержимое того же System.BadImageFormatException :

System.BadImageFormatException HResult = 0x80131058 Сообщение = Возможно не загружать файл или сборку 'System.Runtime.WindowsRuntime, Версия = 4.0.10.0, Культура = нейтральная, PublicKeyToken = ... 'или одна из ее зависимостей. Ссылочные сборки не должны загружаться для выполнения. Они могут быть загружены только в контексте загрузчика только для отражения. (Исключение из HRESULT: 0x80131058) Source = WpfApp1 StackTrace:
в WpfApp1.MainWindow.d__5.MoveNext () в C: \ Users \ User \ Desktop \ UWP \ UWP_DB_SR \ WpfApp1 \ MainWindow.xaml.cs: линия 91 в System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start [TStateMachine] (TStateMachine & stateMachine) в WpfApp1.MainWindow.Button_Click_1 (Отправитель объекта, RoutedEventArgs e) в System.Windows.RoutedEventHandlerInfo.InvokeHandler (Цель объекта, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlersImpl (Источник объекта, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.RaiseEventImpl (отправитель DependencyObject, RoutedEventArgs args) в System.Windows.UIElement.RaiseEvent (RoutedEventArgs e) в System.Windows.Controls.Primitives.ButtonBase.OnClick () в System.Windows.Controls.Button.OnClick () в System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp (MouseButtonEventArgs e) в System.Windows.UIElement.OnMouseLeftButtonUpThunk (Object отправитель, MouseButtonEventArgs e) в System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler (Делегат genericHandler, Object genericTarget) в System.Windows.RoutedEventArgs.InvokeHandler (Обработчик делегата, Объект цель) в System.Windows.RoutedEventHandlerInfo.InvokeHandler (Цель объекта, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlersImpl (Источник объекта, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.ReRaiseEventAs (отправитель DependencyObject, RoutedEventArgs args, RoutedEvent newEvent) в System.Windows.UIElement.OnMouseUpThunk (Отправитель объекта, MouseButtonEventArgs e) в System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler (Делегат genericHandler, Object genericTarget) в System.Windows.RoutedEventArgs.InvokeHandler (Обработчик делегата, Объект цель) в System.Windows.RoutedEventHandlerInfo.InvokeHandler (Цель объекта, RoutedEventArgs routedEventArgs) в System.Windows.EventRoute.InvokeHandlersImpl (Источник объекта, RoutedEventArgs args, Boolean reRaised) в System.Windows.UIElement.RaiseEventImpl (отправитель DependencyObject, RoutedEventArgs args) в System.Windows.UIElement.RaiseTrustedEvent (аргументы RoutedEventArgs) вSystem.Windows.UIElement.RaiseEvent (RoutedEventArgs args, Boolean trust) в System.Windows.Input.InputManager.ProcessStagingArea () в System.Windows.Input.InputManager.ProcessInput (InputEventArgs input) в System.Windows.Input.InputProviderSite(InputReport inputReport) в System.Windows.Interop.HwndMouseInputProvider.ReportInput (IntPtr hwnd, режим InputMode, временная метка Int32, действия RawMouseActions, Int32 x, Int32 y, колесо Int32) в System.Windows.Interop.HwndMouseInputProvessrt (hMnd)Сообщение WindowMessage, IntPtr wParam, IntPtr lParam, Boolean & обрабатываются) в System.Windows.Interop.HwndSource.InputFilterMessage (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean и hWW.Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в MS.Win32.HwndSubclass.DispatcherCallbackOperation (Object o) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, объектные аргументы, Int32 SumArgs)tem.Windows.Threading.ExceptionWrapper.TryCatchWhen (источник объекта, обратный вызов делегата, аргументы объекта, Int32 numArgs, делегат catchHandler) в System.Windows.Threading.Dispatcher.LegacyInvokeImpl (приоритет DispatcherPriority, тайм-аут TimeSpan, метод делегата, аргументы объекта, аргументы объекта Objectgs)) в MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) в MS.Win32.UnsafeNativeMethods.DispatchMessage (MSG & msg) в System.Windows.Impmep.Windows.Threading.Dispatcher.PushFrame (фрейм DispatcherFrame)
в System.Windows.Application.RunDispatcher (игнорирование объекта) в System.Windows.Application.RunInternal (окно окна) в System.Windows.Application.Run (окно окна) в System.Windows.Application.Run () в WpfApp1.App.Main () Внутреннее исключение 1: BadImageFormatException: невозможно загрузить эталонную сборку для выполнения.

РЕШЕНИЕ :**************************************************************************************************

Ответ решения, данный Стефаном Виком MSFT на вопрос, описанный также в теме WDC Исключение System.NullReferenceException в AppServiceResponse и System.BadImageFormatException для UWP с пакетом моста рабочего стола WPF в Система.BadImageFormatException с конкретным проектом связи приложения UWP для настольного моста , основанным на UWP с расширением рабочего стола - часть 3 пример UWP-FullTrust / UWP_FullTrust_3 / , а такжекак решатель моя копия Нико Чжу - MSFT решение ZhuMingHao / AppSerViceTest :

Мои неверные:

  • Программные файлы (x86) \Справочные сборки \ Microsoft \ Framework.NETCore \ v4.5.1 \ System.Runtime.WindowsRuntime.dll
  • Программные файлы (x86) \ Windows Kits \ 10 \ UnionMetadata \ Windows.winmd

Должны быть правильные настройки ссылок:

  • ProgramFiles (x86)% \ Сборки ссылок \ Microsoft \ Framework.NETCore \ v4.5 \ System.Runtime.WindowsRuntime.dll
  • ProgramFiles (x86)% \ Windows Kits \ 10 \ UnionMetadata \ 10.0.17134.0 \ Windows.winmd

1 Ответ

1 голос
/ 13 июля 2019

Это исключение возникает при неправильной ссылке на библиотеки времени выполнения Windows из проекта, не относящегося к UWP (WPF, Winforms, Console и т. Д.). Обязательно обращайтесь к ним следующим образом

  1. В диалоговом окне «Добавить ссылку…» нажмите «Обзор…» и установите для фильтра значение «Все файлы (*. *)»
  2. Перейдите к «% ProgramFiles (x86)% \ Справочные сборки \ Microsoft \ Framework.NETCore \ v4.5 \ System.Runtime.WindowsRuntime.dll»
  3. Перейдите к «% ProgramFiles (x86)% \ Windows Kits \ 10 \ UnionMetadata \ { TargetVersion } \ Windows.winmd»
...