Меня интересует объединение одного файла .cpp (содержащего как собственный, так и управляемый код) в более крупный проект на C #. Я не хочу использовать отдельную DLL для кода CPP, потому что кажется глупым «тратить» целую DLL всего на несколько строк кода, а также потому, что в коде есть некоторые функции безопасности, которые я бы предпочел скрыть немного, пряча его в большую сборку. (И прежде чем кто-то предложит это, я не могу использовать ILmerge или AL, потому что они не работают для нативного кода.)
Базовый процесс компиляции файлов .cpp и группы .cs был рассмотрен несколько раз; ведущие кандидатские предложения выглядят так:
Однако оба эти (и все связанные с ними ссылки, которые я смог найти) имеют дело только со сборкой в командной строке.
Я бы предпочел изменить свой существующий файл .csproj для компиляции и ссылки в коде C ++ (я не против, чтобы сама сборка C ++ находилась в отдельном .vcproj, хотя лучше, если нет, но ссылка должна быть в .csproj), и он должен быть собран из VS2008, так что пользователям проекта не нужно знать разницу.
К сожалению, я не могу успешно вызвать link.exe из .csproj, компилируемого VS. Элемент «Exec» с «ссылкой» не может найти исполняемый файл, потому что он не находится в PATH. Явное указание местоположения («$ (DevEnvDir) .... \ VC \ bin \ link») действительно запускает его, но сразу же происходит сбой с кодом ошибки, указывающим, что он не может загрузить необходимые библиотеки (предположительно потому, что снова это не в ПУТИ).
Есть ли примеры успешных вызовов LINK из csproj из Visual Studio?
Редактировать : хорошо, мне удалось обойти эту проблему сейчас, и все готово, компилируется и работает нормально - в режиме выпуска. Кажется, что он все еще работает нормально в режиме отладки, но по какой-то причине его манифест SxS (который генерирует LINK
, но мне пришлось применить вручную через mt
) относится только к выпуску CRT, а не к DebugCRT. Есть идеи как это исправить?