TL; DR: измените тип сборки со смешанного на управляемый, изменив поддержку CLR с /clr
на /clr:pure
.
подробности:
У меня сегодня была очень похожая ситуация:
У меня есть различные управляемые библиотеки DLL, все скомпилированы с /clr
, потому что некоторые из них импортируют собственные библиотеки DLL.
У меня есть EXE, также скомпилированный с /clr
.
Все они написаны на C ++ / CLI.
До сих пор все пользовательские элементы управления находились в DLL. Сегодня я создал UC в сборке EXE и хотел вставить этот UC в основной форме EXE. Это не удалось и просто сказал
Не удалось загрузить элемент панели инструментов. Он будет удален из панели инструментов.
Ничего другого.
Итак, я создал новый проект winforms, добавил ссылку на EXE (работал) и попытался добавить элементы управления EXE в Visual Studio Designer Toolbox. Последнее действие не выполнено, сообщение об ошибке было
Попытка загрузить непроверяемый исполняемый файл с исправлениями (IAT с более чем 2 разделами или разделом TLS.)
Со вторым сообщением об ошибке я нашел этот пост Stackoverflow, где @Stephen явно выше кавычек
"Смешанный режим C ++ EXE не может быть перемещен в память должным образом, когда
загружается как ссылка на сборку. Вот почему есть время выполнения
неудача. "
из MSDN. Это означает, что я компилировал в сборку EXE смешанного режима, если сообщение было правильным. Поэтому я посмотрел, где можно изменить тип создаваемой сборки, и обнаружил Смешанные (собственные и управляемые) сборки на MSDN,
ссылки на некоторые страницы с подробными описаниями, одна из которых
Чистый и проверяемый код (C ++ / CLI) . Там я увидел, что мне нужно использовать /clr:pure
.
После изменения этого параметра для моей сборки EXE (не DLL, они остаются смешанными), я смог добавить его в VS Designer Toolbox тестового проекта, а также вставить UC в основную форму EXE.