Поэтому у меня есть три части:загрузка других .NET библиотеки из C++/CLI библиотеки называется нативным кодом
- Lib: A C# библиотеки, скомпилированные для AnyCPU.
- BridgeLib: библиотека C++/CLI, скомпилированная для x86. Он экспортирует собственную функцию C, называемую
bridgeEntry
, и вызывает методы в Lib. - NativeExe: родное приложение C++ Win32, которое просто загружает BridgeLib.dll и выполняет
bridgeEntry
.
Теперь я помещаю их все в одну директорию, и, как и ожидалось, код из Lib выполняется при запуске NativeExe.
Однако, если изменить структуру каталогов, как это:
├───exe
│ NativeExe.exe
│
└───libs
BridgeLib.dll
Lib.dll
вещи немного по-другому. Очевидно, что работает NativeExe.exe
в папке exe
, потому что он не может найти BridgeLib.dll
. Но это можно решить, перейдя в папку libs
и запустив ..\exe\NativeExe.exe
. Теперь приложение загружает BridgeLib.dll
и переходит на bridgeEntry
. Но теперь CLR падает с FileNotFoundException
, потому что он ищет Lib.dll
в папке исполняемого файла (exe
), а не в папке библиотеки моста libs
.
Это просто слишком упрощенный пример, и я не могу изменить структуру каталогов. Но как еще я могу решить эту проблему?
Это просто слишком упрощенный пример, на самом деле я ничего не знаю о структуре каталогов, кроме того факта, что собственные исполняемые файлы и сборки .NET находятся в разных каталогах. Как определить каталог в событии AssemblyResolve? –
@ main-- Вам нужно знать, где собирается сборка .NET - * something *, чтобы обеспечить это местоположение, и если это не соответствует нормальным путям, вам нужно что-то делать. –