Пытаюсь использовать Kinect для Windows с C#, но получаю исключение System.BadImageFormatException

Я пытаюсь создать очень простую программу Microsoft DSS, в которой я подписываюсь на события, генерируемые примером Kinect DSS, который реализует распознавание речи с помощью массивного микрофона. Однако во время выполнения я получаю ошибку, показанную ниже.

Я ссылался на прокси-файл .dll, который предоставляет доступ к интерфейсу, но во время выполнения возникает проблема.

Я попытался установить целевую платформу сборки на x86, но это, похоже, не решило проблему. Есть ли способ убедиться, что мой проект создается для платформы x86?

Оказывается, что нужно запустить программу, используя dsshost32, а не dssproxy после сборки по умолчанию, который запускается шаблоном Visual Studio .sln для узлов DSS. Это запускает узел DSS в 32-разрядной среде CLR, и библиотеки Kinect работают нормально.


person OregonTrail    schedule 15.11.2012    source источник
comment
Что произойдет, если вы явно настроите сборку проекта как x86 или x86_64?   -  person Security Hound    schedule 15.11.2012
comment
Код, фактически вызывающий исключение, находится в dsshost.exe, который инициализирует службы DSS. Исключение выше появляется после строки предупреждения от dsshost: *** Не удалось зарегистрировать типы с пользовательской сериализацией.:   -  person PhonicUK    schedule 15.11.2012
comment
Это команда после сборки. C:\Users\ajs\Microsoft Robotics Dev Studio 4\bin\dssproxy.exe /dll:$(TargetPath) /proxyprojectpath:$(ProjectDir)Proxy /keyfile:$(AssemblyOriginatorKeyFile) $(ProxyDelaySign) $(CompactFrameworkProxyGen) /binpath :. /referencepath:C:\Users\ajs\Microsoft Robotics Dev Studio 4\bin\   -  person OregonTrail    schedule 15.11.2012
comment
Не удалось зарегистрировать типы с пользовательской сериализацией.: System.BadImageFormatException:
Не удалось загрузить файл или сборку 'file:///c:\users\ajs\microsoft robotics dev studio 4\bin\micarrayspeechrecognizer.y2011.m06.dll ' или одна из его зависимостей. Была предпринята попытка загрузить программу с неверным форматом. Имя файла: 'file:///c:\users\ajs\microsoft robotics dev studio 4\bin\micarrayspeechrecognizer.y2011.m06.dll' в System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence AssemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & ​​stackMark, IntPtr pPrivHostBinder, булева throwOnFileNotFound, булева forIntrospection, булевы suppressSecurityChecks) при System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark & ​​stackMark, IntPtr pPrivHostBinder, булевой throwOnFileNotFound, Boolean, forIntrospection булева suppressSecurityChecks ) в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyNameassemblyRef, Evidence AssemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean submitSecurityChecks) в System.Reflection.RuntimeAssem bly.InternalLoadFrom(String AssemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suspendSecurityChecks, StackCrawlMark& stackMark) в System.Reflection.Assembly.LoadFrom(String AssemblyFile) в Microsoft.Dss.Services.Serializer.DataCache. LoadAssemblyFile (местоположение Uri, логический кэш, логическое значение и inCache) в Microsoft.Dss.Services.Serializer.DataCache.RegisterCustomSerializersFromServiceAssembly (Assembly pa, местоположения AssemblyLocations) === Информация о состоянии предварительной привязки === LOG: User = condor\ajs LOG : Где-ссылка привязать. Location = c:\users\ajs\microsoft robotics dev studio 4\bin\micarrayspeechrecognizer.y2011.m06.dll LOG: Appbase = file:///C:/Users/ajs/Microsoft Robotics Dev Studio 4/bin/ LOG: Initial PrivatePath = NULL Вызывающая сборка: (Неизвестно). === ЖУРНАЛ: Эта привязка начинается в контексте загрузки LoadFrom. WRN: собственный образ не будет проверяться в контексте LoadFrom. Собственное изображение будет проверяться только в контексте загрузки по умолчанию, например, с помощью Assembly.Load(). ЖУРНАЛ: Использование файла конфигурации приложения: C:\Users\ajs\Microsoft Robotics Dev Studio 4\bin\DssHost.exe. ЖУРНАЛ конфигурации: использование файла конфигурации хоста: ЖУРНАЛ: использование файла конфигурации компьютера из C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. ЖУРНАЛ: Попытка загрузки нового файла URL:///c:/users/ajs/microsoft robotics dev studio 4/bin/micarrayspeechrecognizer.y2011.m06.dll. ERR: Не удалось завершить настройку сборки (hr = 0x8007000b). Зондирование прекращено.   -  person OregonTrail    schedule 15.11.2012


Ответы (1)


Затем кажется, что необходима утомительная последовательность действий, чтобы изменения кода из Visual Studio отображались при использовании dsshost32:

Создайте и запустите 64-разрядный проект, пока журнал не покажет, что «кэш хоста DSS обновлен». На моей машине это занимает около десяти секунд.

  1. Запустите узел DSS с помощью dsshost32 вручную в командной строке.
  2. Нам нужен код, который вызывает исключение, если вам нужна помощь. Я предполагаю, что вы используете текущую версию Kinect SDK.
person OregonTrail    schedule 18.11.2012