.NET 4.0 WinForm - Не удалось загрузить файл или сборку или одну из ее зависимостей.не является приложением Win32 - PullRequest
0 голосов
/ 25 мая 2018

У меня есть приложение, которое работает на большинстве Windows 10 (64-разрядных) систем, но есть 6 компьютеров, которые получают такое же исключение BadImageFormatException.Приложение и библиотеки ориентированы на AnyCPU.При попытке создать COM-объект из сборки я получаю исключение:

Не удалось загрузить файл или сборку 'InfoConnectCOM.Wrapper64.dll' или одну из ее зависимостей.не является приложением Win32.(Исключение из HRESULT: 0x800700C1)

Исходя из имени оболочки, похоже, что оно должно ссылаться на сборки x64.Было 30 компьютеров, недавно созданных таким же образом, и только 6 имеют эту проблему.Кроме того, есть несколько сотен других Win10 (64-разрядных) компьютеров, которые не сталкиваются с этой проблемой.

    Private _system As Object
    Private Const IC16AssemblyName As String = "InfoConnectCOM.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=13bff1b6907eadcf"
    Private Sub CreateIC16SystemObject()
        Dim assembly As Reflection.Assembly = Reflection.Assembly.Load(IC16AssemblyName)
        Dim type As System.Type = assembly.GetType("Accmgr.AccmgrSystemWrapper")
        _system = Activator.CreateInstance(type)
    End Sub

Сборка загружается динамически, так как мне нужен код для работы с другой версиейпрограммное обеспечение на разных платформах.


Stacktrace System.Reflection.TargetInvocationException

   System.RuntimeTypeHandle.CreateInstance(type As RuntimeType, publicOnly As Boolean, noCheck As Boolean, canBeCached As Boolean&, ctor As RuntimeMethodHandleInternal&, bNeedSecurityCheck As Boolean&)
       QCC.exe: N 00000
   System.RuntimeType.CreateInstanceSlow(publicOnly As Boolean, skipCheckThis As Boolean, fillCache As Boolean, stackMark As StackCrawlMark&)
       QCC.exe: N 00142
   System.Activator.CreateInstance(type As Type, nonPublic As Boolean)
       QCC.exe: N 00105
   System.Activator.CreateInstance(type As Type)
       QCC.exe: N 00012
   IAT.AccMgr.Session.CreateIC16SystemObject()
       QCC.exe: N 00060
   IAT.AccMgr.Session.CreateSystemObject()
       QCC.exe: N 00029
   IAT.AccMgr.Session..ctor()
       QCC.exe: N 00163

Stacktrace BadImageFormatException

   System.Reflection.RuntimeAssembly._nLoad(fileName As AssemblyName, codeBase As String, assemblySecurity As Evidence, locationHint As RuntimeAssembly, stackMark As StackCrawlMark&, pPrivHostBinder As IntPtr, throwOnFileNotFound As Boolean, forIntrospection As Boolean, suppressSecurityChecks As Boolean)
       QCC.exe: N 00000
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(assemblyRef As AssemblyName, assemblySecurity As Evidence, reqAssembly As RuntimeAssembly, stackMark As StackCrawlMark&, pPrivHostBinder As IntPtr, throwOnFileNotFound As Boolean, forIntrospection As Boolean, suppressSecurityChecks As Boolean)
       QCC.exe: N 00457
   System.Reflection.RuntimeAssembly.InternalLoadFrom(assemblyFile As String, securityEvidence As Evidence, hashValue As Byte[], hashAlgorithm As AssemblyHashAlgorithm, forIntrospection As Boolean, suppressSecurityChecks As Boolean, stackMark As StackCrawlMark&)
       QCC.exe: N 00182
   System.Reflection.Assembly.LoadFrom(assemblyFile As String, securityEvidence As Evidence)
       QCC.exe: N 00056
   System.Activator.CreateInstanceFromInternal(assemblyFile As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object[], culture As CultureInfo, activationAttributes As Object[], securityInfo As Evidence)
       QCC.exe: N 00029
   Accmgr.AccmgrSystemWrapper.CreateAccmgrSystemWrapper(installDir As String)
       QCC.exe: N 00086
   Accmgr.AccmgrSystemWrapper..ctor()
       QCC.exe: N 00045

Мы пробовалиудаление и повторная установка программного обеспечения InfoConnect.Если я изменю свой код и библиотеки на целевой x86, то он запустится.Но я бы хотел избежать перекомпиляции всего программного обеспечения для x86.

Есть идеи о том, как продолжить устранение неполадок или почему это может повлиять только на небольшое количество компьютеров?

Спасибо

1 Ответ

0 голосов
/ 26 мая 2018

Оказывается, единственная распространяемая библиотека C на машинах была 32-разрядной версией.COM Wrapper находится в C, поэтому при попытке загрузить mvscr120.dll извлекалась неверная версия.Ремонт решил проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...