Как мне вызвать смешанную сборку C ++ / CLI из C #? - PullRequest
4 голосов
/ 02 декабря 2010

Я написал сборку C ++ / CLI в смешанном режиме, которая включает в себя собственную библиотеку C ++.Он успешно компилируется.Я могу написать приложение на C ++ / CLI, которое использует эту сборку, поэтому я знаю, что оно работает.

Итак, я написал приложение на C #, которое использует ту же сборку C ++ / CLI.Это также хорошо компилируется.Но когда я пытаюсь запустить его, я получаю «BadImageFormatException» с подробным сообщением об исключении ниже.

Я думаю, что это исключение происходит, потому что моя сборка работает в смешанном режиме и поэтому «небезопасна».Но из того, что я прочитал, предполагается, что даже небезопасным сборкам доверяют при запуске с локального жесткого диска, что я и делаю.

Может кто-нибудь помочь мне понять, что здесь происходит?Возможно ли то, что я пытаюсь сделать?

Подробное сообщение об исключении:

System.BadImageFormatException was unhandled
  Message="Could not load file or assembly 'asillyclass, Version=1.0.3988.20325, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format."
  Source="ConsoleApplication1"
  FileName="asillyclass, Version=1.0.3988.20325, Culture=neutral, PublicKeyToken=null"
  FusionLog="=== Pre-bind state information ===
: User = SIG\\user
: DisplayName = asillyclass, Version=1.0.3988.20325, Culture=neutral, PublicKeyToken=null\n (Fully-specified)
: Appbase = file:///C:/projects/API/TestApp-C#/ConsoleApplication1/bin/Debug/
: Initial PrivatePath = NULL
 assembly : ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
: This bind starts in default load context.
: Using application configuration file: C:\\projects\\API\\TestApp-C#\\ConsoleApplication1\\bin\\Debug\\ConsoleApplication1.vshost.exe.config
: Using machine configuration file from C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\config\\machine.config.
: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
: Attempting download of new URL file:///C:/projects/API/TestApp-C#/ConsoleApplication1/bin/Debug/asillyclass.DLL.
: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
"
  StackTrace:
       at ConsoleApplication1.Program.Main(String[] args)
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

1 Ответ

9 голосов
/ 02 декабря 2010

Наиболее вероятной причиной является то, что вы используете 64-битную ОС, и имеется 32/64-битное несоответствие (например, DLL-библиотека 32-битная, а приложение 64-битная / AnyCPU). *

Чтобы исправить, перейдите в свойства вашего приложения и выберите x86 вместо AnyCPU.

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