Как распространять 32-и 64-разрядные версии библиотеки



У меня есть библиотека C#, которая вызывается различными клиентами (как 32-разрядными, так и 64-разрядными). До сих пор он был скомпилирован как AnyCPU, поэтому не было никаких проблем.



Недавно я добавил зависимость в библиотеку SQLite .NET, которая поставляется как в 32-х, так и в 64-битных вариантах (но не AnyCPU). Итак, теперь у меня должно быть 2 сборки - для обеих разрядностей.



В прошлом я видел другие библиотеки (MS SQL Compact приходит на ум), которые имели схему, где одна сборка .NET имела бы Privateamd64 и Privatex86 папки в папки с соответствующими собственными библиотеками в них, и он будет вызывать каждую из них по мере необходимости.



Является ли этот подход жизнеспособным для моей ситуации? Есть ли документация о том, как ее реализовать? Требуются ли изменения в коде или это метод распространения?
552   2  

2 ответов:

Есть несколько способов справиться с этим. Изменения кода (небольшие) требуются для первых трех подходов:

A. Вы можете изменить путь, чтобы указать на конкретную папку платформы во время запуска приложения. Затем .NET автоматически загрузит локальные библиотеки DLL из этой папки.

B. Вы можете подписаться на событие AssemblyResolve, а затем выбрать сборку на основе платформы.

Проверьте сообщение Скотта Билиаса в блоге на эту тему http://scottbilas.com/blog/automatically-choose-32-or-64-bit-mixed-mode-dlls / . заметим, что в конечном итоге он предпочитает подход A.

" в двух словах, решение состоит в том, чтобы обмануть загрузчик! Ссылка на p4dn.dll, которая не существует, и используйте событие AssemblyResolve, чтобы перехватить загрузку и перенаправить ее в сборку правильного размера бита."

C. используйте специфичный для платформы набор exe.конфигурации и элемент codebase для определения расположения сборок. Ваша программа установки установит правильный один основан на платформе.

Http://msdn.microsoft.com/en-us/library/4191fzwb.aspx

D. напишите две настройки, одну для 32-разрядной и одну для 64-разрядной, а затем установите только соответствующие файлы для платформы.

Вы можете загрузить соответствующую сборку на лету, используя System.Отражение.Собрание.Нагрузка

См.: http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx

Comments

    Ничего не найдено.