Страницы

Поиск по вопросам

четверг, 16 мая 2019 г.

Собрать универсальное C# приложение

Недавно сделал для себя открытие - при сборке .NET-приложения я могу выбрать разрядность целевой платформы. Полез читать в интернеты, и все, что я понял - так это то, что ничего я не понял.
Сам я java-ист. С детства думал, что не важно, для чего собирать, важно, какой разрядности jvm. Но тут, видимо, все иначе...
Прошу помочь с такой проблемой:
Нужно собрать приложение, которое использует стороннюю c++ библиотеку. Для библиотеки доступны 32 и 64-битные .dll-ки. От приложения не требуется сверхпроизводительности, так что и 32-битная версия меня устроит.
Могу ли я собрать свой проект как 32-битный с использованием лишь 32-битной .dll и рассчитывать на то, что все это дело будет работать как в 32-битной, так и в 64-битной системе? И если нет, то как лучше сделать?
И пара второстепенных вопросов, которые помогут мне понять, что я делаю:
Собранное для 64-битной системы .NET приложение ведь будет невозможно запустить в 32-битной системе, или же это работает слегка иначе, чем с нативными приложениями?
Верно ли я понимаю, что приложения, собранные для систем разной разрядности, запускаются на разных виртуальных машинах, и, как следствие, на 64-битной версии windows установлены виртуальные машины CLR двух разрядностей?


Ответ

Все именно так как и кажется: 32х-разрядная версия будет работать почти' где угодно, 64х-разрядная потребует 64х-разрядную систему.
Однако, если у вас есть обе версии чужой библиотеки - то лучше оставить свою сборку не привязанной к разрядности (AnyCPU), а при загрузке библиотеки загружать ту, которая соответствует разрядности текущего процесса.
Подробности - вот тут: Подгрузка разных dll в зависимости от разрядности системы

' 32х-разрядная версия не будет работать на 64х-разрядной системе без поддержки 32х-разрядных приложений, например такое возможно на Windows Server Core (спасибо PetSerAl за уточнение)

Комментариев нет:

Отправить комментарий