Третья сторона компилирует неуправляемый код (отдельно x86 / x64) и предоставляет управляемые библиотеки DLL C # .NET для любой платформы (отдельно x86 / x64):
- FooManaged_x86.dll
- FooManaged_x64.dll
Это то, что я получаю (ни нативный код, ни неуправляемые библиотеки).
Затем я могу создать приложение (или библиотеку) C # .NET, ориентированное на x86 или x64, и напрямую ссылаться на соответствующую управляемую dll - все нормально, но ограничено одной конкретной платформой (не моя цель).
Мое приложение может нацеливаться на AnyCpu (моя цель), ссылаться на dll x64 (плохо, предупреждение компилятора), и оно будет работать только тогда, когда оно действительно работает как x64. Опять же, это привязано к одной конкретной платформе.
Я знаю, что могу объединить неуправляемые библиотеки DLL x86 / x64 (с Fody.Costura) в одну управляемую DLL, динамически загружая соответствующую DLL во время выполнения (используя DllImport и ручную AssemblyLoad под капотом). Я сделал это с большим успехом, но этот метод плохо подходит для управляемых dll. Мне бы пришлось использовать PInvoke из управляемого C # в управляемые библиотеки DLL C #, что для меня звучит неправильно.
В: Есть ли способ объединить две управляемые библиотеки DLL x86 / x64 в одну управляемую DLL AnyCpu без PInvoke?