Страницы

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

пятница, 14 февраля 2020 г.

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

#c_sharp #net #clr


Недавно сделал для себя открытие - при сборке .NET-приложения я могу выбрать разрядность
целевой платформы. Полез читать в интернеты, и все, что я понял - так это то, что ничего
я не понял.

Сам я java-ист. С детства думал, что не важно, для чего собирать, важно, какой разрядности
jvm. Но тут, видимо, все иначе...

Прошу помочь с такой проблемой:

Нужно собрать приложение, которое использует стороннюю c++ библиотеку. Для библиотеки
доступны 32 и 64-битные .dll-ки. От приложения не требуется сверхпроизводительности,
так что и 32-битная версия меня устроит.

Могу ли я собрать свой проект как 32-битный с использованием лишь 32-битной .dll
и рассчитывать на то, что все это дело будет работать как в 32-битной, так и в 64-битной
системе? И если нет, то как лучше сделать?

И пара второстепенных вопросов, которые помогут мне понять, что я делаю:

Собранное для 64-битной системы .NET приложение ведь будет невозможно запустить в
32-битной системе, или же это работает слегка иначе, чем с нативными приложениями?

Верно ли я понимаю, что приложения, собранные для систем разной разрядности, запускаются
на разных виртуальных машинах, и, как следствие, на 64-битной версии windows установлены
виртуальные машины CLR двух разрядностей?
    


Ответы

Ответ 1



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

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

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