2015-08-24 3 views
2

фон

Зависимость Dll не может быть загружена. Как читать fuslogvw?


Я делаю программу в C#, который использует по умолчанию Kinect Fusion демо для 3D сканирования в. Я добавил в эту программу много разных вещей, и я почти закончил. Он отлично работает благодаря отладке VS2013. Я также создал установщик, но когда я запускаю установленное приложение, я получаю некоторые ошибки, которые я укажу здесь ниже. Я использую японскую версию Windows (8.1 64 бит), что означает, что мне нужно перевести все ошибки, которые мне показывают. Это означает, что ошибки, которые я показываю здесь, могут быть не на 100% логическими или правильными. Я также не очень опытен с C#, поэтому я мог бы не заметить некоторые очень простые вещи здесь. Поэтому, пожалуйста, не стесняйтесь задавать любые вопросы. Я мог бы быть так, потому что, поскольку я не слишком много знаю об этом, я мог бы пропустить что-то очень простое для кого-то более опытного.

Просто немного больше информации о программе:

  • Это активная платформа решение x64 (он до сих пор получает установлен в x86, не уверен, если это имеет значение);
  • Перед запуском требуется доступ администратора;
  • В «Программные файлы (x86)» с таким же названием (3D-Scanner) есть другой каталог, который содержит другое приложение, необходимое для удаления пола. Может быть, это беспорядок с поиском/поиском возможностей? Мой первоначальный план состоял в том, чтобы они пошли на одну и ту же карту, но система создает две одинаковые карты;
  • По умолчанию программа Kinect Fusion, которую я использую, - 64 бит. У меня были некоторые проблемы с этим раньше, так как мое приложение не смогло создать установщик с 64-разрядной ссылкой в ​​виде 32-битного проекта. Я переключил его на 64-битный проект, и установщик, похоже, работает нормально (за исключением отсутствующей ссылки dll).

Ошибки


Когда происходит сбой приложения, и я начинаю ее отладки с VS2013 я получаю следующую ошибку:

An unhandled exception of type 'System.IO.FileLoadException' occurred in PresentationCore.dll 

Additional information: 
    file or assembly 'Microsoft.Kinect.Fusion, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35', or one of its dependencies could not be loaded. 
    Manifest definition of the found assembly does not match the assembly reference. (Exception from HRESULT: 0x80131040) 

Когда я открываю его в VS2013 я получаю сообщение «Стек вызовов содержит только внешний код». Когда я отключил «Just My Code», мне в основном показали какой-то машинный код или что-то еще. Я не думаю, что это было очень важно, поэтому я не стану его здесь. Если вам нужно увидеть этот код, пожалуйста, сообщите мне, и я отправлю его здесь.

указан как «Call Stack с внешним кодом» (я должен использовать изображение, поскольку стек вызов не копирования состояния) следующий: Call stack with external code

Что я попытался


Ну, после некоторого чтения я, конечно же, обнаружил, что получаю эту ошибку из-за того, что в программе отсутствует ссылка/зависимость. Это отчасти странно для меня, поскольку он работает в отладке. В любом случае я попытался изложить и попытаться найти то, что было, что мне не хватало. Я использовал dependency walker в файле, чтобы узнать, что он принесет, но я не мог многое сделать. Это был такой огромный объем данных, и я не знаю, что я ищу.

Итак, я выстрелил Fuslogvw.exe, чтобы увидеть, могу ли я найти ошибки. Это, безусловно, приблизило меня.Результат кажется намного более логичным, но я до сих пор не знаю, что я ищу. Еще раз обратите внимание, что, поскольку я работаю над японской системой, мне пришлось перевести эти журналы, поэтому журналы выглядят немного. Вот выход для из DLL Microsoft.Kinect.Fusion (который является один я предполагаю, что вызывает проблемы) на работает отладочной версии программы:

*** Assembly bind log entry (2015/08/24 @ 10:38:40) *** 

We were successful in the operation. 
Bind Result:. Hr = 0x0 I The operation completed successfully. 

Assembly manager to read from: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll 
It is running under the executable file. C: \ Users \ bono \ Documents \ Visual Studio 2013 \ Projects \ 3D-Scanner \ 3D-Scanner \ bin \ x64 \ Release \ 3D-Scanner.vshost.exe 
--- Detailed error log is as follows. 

=== Pre-bind state information === 
Log: DisplayName = Microsoft.Kinect.Fusion, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 
    (Fully-specified) 
Log: Appbase = file: /// C:/Users/bono/documents/visual studio 2013/Projects/3D-Scanner/3D-Scanner/bin/x64/Release/
Log: Initial PrivatePath = NULL 
Log: Dynamic Base = NULL 
Log: Cache Base = NULL 
Log: AppName = 3D-Scanner.vshost.exe 
the calling assembly: 3D-Scanner, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null 
=== 
Log: This bind starts in read context of default. 
Log: The application configuration file C: I use the \ Users \ bono \ documents \ visual studio 2013 \ Projects \ 3D-Scanner \ 3D-Scanner \ bin \ x64 \ Release \ 3D-Scanner.vshost.exe.Config. 
Log: I use the host configuration file. 
Log: C: I use the computer configuration file from the \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config. 
Log: reference after policy: Microsoft.Kinect.Fusion, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 
Log: I failed to GAC look up. 
Log: A new URL file: /// C:/Users/bono/documents/visual studio 2013/Projects/3D-Scanner/3D-Scanner/bin/x64/Release/Microsoft.Kinect.Fusion.DLL and trying to download You. 
Log: I succeeded in downloading the assembly. The next file you are trying to set up: C: \ Users \ bono \ documents \ visual studio 2013 \ Projects \ 3D-Scanner \ 3D-Scanner \ bin \ x64 \ Release \ Microsoft.Kinect.Fusion.dll 
Log: I went into the setup phase of execution from the source. 
Log: assembly name Microsoft.Kinect.Fusion, Version = 2.0.0.0, Culture = neutral, is PublicKeyToken = 31bf3856ad364e35. 
Log: I succeeded to bind. C: it will return the \ Users \ bono \ documents \ visual studio 2013 \ Projects \ 3D-Scanner \ 3D-Scanner \ bin \ assembly from x64 \ Release \ Microsoft.Kinect.Fusion.dll. 
Error: the assembly has been loaded in the default read context. 

Вот это версия нерабочей установлена версия программы:

*** Assembly bind log entry (2015/08/24 @ 10:34:17) *** 

It failed in operation. 
Bind Result:. Hr = 0x80131040 but there is no description. 

Assembly manager to read from: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll 
It is running under the executable file. C: \ Program Files (x86) \ 3D-Scanner \ 3D-Scanner \ 3D-Scanner.exe 
--- Detailed error log is as follows. 

=== Pre-bind state information === 
Log: DisplayName = Microsoft.Kinect.Fusion, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 
    (Fully-specified) 
Log: Appbase = file: /// C:/Program Files (x86)/3D-Scanner/3D-Scanner/
Log: Initial PrivatePath = NULL 
Log: Dynamic Base = NULL 
Log: Cache Base = NULL 
Log: AppName = 3D-Scanner.exe 
the calling assembly: 3D-Scanner, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null 
=== 
Log: This bind starts in read context of default. 
Log: The application configuration file C: I use the \ Program Files (x86) \ 3D-Scanner \ 3D-Scanner \ 3D-Scanner.exe.Config. 
Log: I use the host configuration file. 
Log: C: I use the computer configuration file from the \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config. 
Log: reference after policy: Microsoft.Kinect.Fusion, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 
Log: I failed to GAC look up. 
Log: A new URL file: /// C:/Program Files I am trying to download the (x86) /3D-Scanner/3D-Scanner/Microsoft.Kinect.Fusion.DLL. 
Log: I succeeded in downloading the assembly. The next file you are trying to set up: C: \ Program Files (x86) \ 3D-Scanner \ 3D-Scanner \ Microsoft.Kinect.Fusion.dll 
Log: I went into the setup phase of execution from the source. 
Log: assembly name Microsoft.Kinect.Fusion, Version = 0.0.0.0, Culture = neutral, is PublicKeyToken = null. 
Warning: The results of the comparison of the assembly name, mismatch of Major Version found. 
Error: assembly references, it did not match the found assembly definition. 
Error: set-up phase of execution from the source failed (hr = 0x80131040). 
Error: Could not complete the setup of assembly (hr = 0x80131040). Survey it was canceled. 

Я думаю, что недостающая информация находится где-то там, но я не знаю, как сделать смысл. Я был бы признателен за любую помощь, когда дело доходит до сбора полезной информации.

Дополнительная информация


Я не уверен, если это абсолютно необходимо, но я думал, что это может быть стоит, чтобы показать мои файлы программы установки. Возможно, я пропустил, включая что-то там, которое вызывает эту недостающую ссылку на dll. Я просто использую все доступные файлы (насколько мне известно) в качестве файлов назначения, но я могу что-то упустить.

installer files

+0

Какая версия Microsoft.Kinect.Fusion.dll доступна в установленном пути. Похоже, что существует несоответствие версии. – Taleeb

+0

@Taleeb Хм, я думаю, почему-то это может быть «0.0.0.0» (я предполагаю, что могу проверить через: properties -> most right tab -> File version?). – Bono

+0

Да - версия, указанная в журналах, также равна 0.0.0.0 (в то время как она ожидает версию 2.0.0.0). Лично я понятия не имею о Microsoft.Kinect.Fusion ... но вы можете скопировать dll из рабочей среды в нерабочую среду - это, надеюсь, решит вашу проблему. – Taleeb

ответ

1

Это выглядит как вопрос о несовпадения версий. Журналы из нерабочей среды говорят, что найденная версия равна 0.0.0.0, а ожидаемая версия 2.0.0.0.

Log: assembly name Microsoft.Kinect.Fusion, Version = 0.0.0.0, Culture = neutral, is PublicKeyToken = null. 
Warning: The results of the comparison of the assembly name, mismatch of Major Version found. 
Error: assembly references, it did not match the found assembly definition. 
Error: set-up phase of execution from the source failed (hr = 0x80131040). 
Error: Could not complete the setup of assembly (hr = 0x80131040). Survey it was canceled. 

Для решения проблемы - скопируйте правильную версию dll в нерабочую среду.

+0

Ну, это было намного проще, чем я ожидал. быть. Я видел, что это было несоответствие, но думал, что это связано с отсутствием ссылки или что-то еще. Копирование различных версий в каталог установки работало (не все из них, но я нашел его). Я принудительно помещал его в выходные файлы проекта установщика, а после установки он работает сейчас. Благодаря! – Bono

Смежные вопросы