Упаковка файлов C# в DLL
В настоящее время я использовал SWIG для преобразования некоторых библиотек C++, которые мне нужны в C#, чтобы использовать их прецедент, который я реализую в C#, выводом были некоторые CS-файлы, которые должны быть включены в проект, и есть projectNameBridge.DLL-файл.
Включение всех этих cs в мой проект делает его немного грязным, поэтому мне было интересно, есть ли способ обернуть эти CS-файлы в DLL, который может быть добавлен непосредственно в качестве ссылки, чтобы содержать все эти файлы.
Любой предложения?
2 ответа:
Примечание относительно компиляции DLL
Visual studio имеет по крайней мере три цели компиляции (в зависимости от того, что вы установили и т. д.):
x86
-x64
-anycpu
Как они взаимодействуют и ко-привычка может быть боль, если не сделано правильно, и они ведут себя по-разному в зависимости от количества бит ОС, которую вы используете, поэтому я добавил небольшое, краткое руководство о том, как битность (за неимением лучшего термина) вызывает взаимодействие между различными настройками:
Давайте возьмем 3 DLL-файла, все с тем же кодом в них, который мы, в истинном стиле Blue Peter, подготовили ранее:
anycpu.dll
-- compiledanycpu
x86.dll
-- compiledx86
x64.dll
-- compiledx64
И 3 исполняемых файла все делают то же самое: вызывая консольный вывод "Bitness interplay" из dll.
anycpu.exe
-- compiledanycpu
x86.exe
-- compiledx86
x64.exe
-- составленоx64
Код идентичен во всех случаях, однако цель компиляции изменилась, и они работают/отказываются работать в 32/64-битных вариантах ОС следующим образом:
32-битная ОС
anycpu.exe
-- выполняется как 32-разрядный процесс использования dll файлы: загрузитьanycpu.dll
иx86.dll
вызываетBadImageFormatException
, если он пытается нагрузкаx64.dll
x86.exe
-- выполняется как: 32-битный процесс использование DLL: может загрузитьanycpu.dll
иx86.dll
вызываетBadImageFormatException
, если он пытается загрузитьx64.dll
x64.exe
-- Выполняется как:BadImageFormatException
, когда он пытается запустить64-битная ОС
anycpu.exe
-- выполняется как 64-разрядный процесс использования dll файлы: загрузитьanycpu.dll
иx64.dll
вызываетBadImageFormatException
, если он пытается нагрузкаx86.dll
x86.exe
-- выполняется как: 32-битный процесс использование DLL: может загрузитьanycpu.dll
иx86.dll
вызываетBadImageFormatException
, если он пытается загрузить - х64.dllx64.exe
-- выполняется как: 64-битный процесс использование DLL: может загрузитьanycpu.dll
иx64.dll
вызываетBadImageFormatException
, если он пытается загрузитьx86.dll
Итак, если вы действительно нужна определенная битность/битливость (нет хорошего слова для этого!) Я бы придерживался цели компиляции
anycpu
: она немного менее совершенна, чем конкретный таргетинг, но ваше творение должно заставить вас гордиться независимо от вкуса битов (это более приятный способ сказать это), на которых вы работаете.
Важно:
Мой брат сделал хорошее замечание, которое стоит упомянуть: некоторые SDK требуют определенной цели компиляции (ANYCPU, x84, x64 и т. д.) и используют неправильный можно вызвать ошибки компиляции / выполнения.
Запуск проекта
Создать DLL-файл в C# еще проще, чем в C++: Сначала мы создаем новый проект, основанный на библиотеке классов типа
После установки относительных параметров по вашему выбору и последующего нажатия кнопки " OK " мы почти закончили, так как VS аккуратно переносит нас в файл C#, указанный вами на предыдущем экране.
Можно также добавить код для выполнения действий, которые мы требуем от библиотеки DLL, чтобы иметь возможность выполнять...
Теперь, когда код готов, вы можете построить проект, используя режим Release или Debug (в зависимости от того, что больше всего соответствует вашим потребностям).Перейдите в соответствующую папку сборки..... И Вуаля! ваша блестящая новая библиотека DLL готова к использованию!
И теперь вы можете вызвать DLL из другого проекта C# на досуге:)
Надеюсь, это поможет, и, позвольте мне знайте, если вам нужна дополнительная информация:)