Может ли .NET VM (mscorlib) вызываться из собственной программы Win32 для выполнения IL / другого внутреннего формата скомпилированного кода? - PullRequest
1 голос
/ 07 сентября 2010

Старый вопрос: у меня есть .exe (PE) с кодом IL (.NET).При запуске вызывается функция mscorlib.dll (.NET Framework) для запуска кода IL.Могу ли я извлечь сегмент кода .NET и добавить его в другую программу (которая вызывает mscorlib.dll для выполнения этого сегмента)?

Новый вопрос:

Я хочу добавить скомпилированный кодиз C # .NET-программы в собственное чистое Win32-приложение, которое может работать без каких-либо сред выполнения .NET и выполнять его, динамически вызывая функции mscorlib.dll, если присутствует .NET.Это похоже на метод «исполняемого соединения», а не на собственную компиляцию.

Я не хочу записывать некоторые .NET .exe во временную директорию и выполнять их;это уже сделано, и теперь нужно избавиться от временной папки, вызвав .NET vm непосредственно для кода .NET внутри моего файла (выдав смещение найденной структуры / сессии или просто назначив правильное имя PE .section - просто знайтенемного о формате PortableExecutable).

Ссылка: http://webcache.googleusercontent.com/search?q=cache:u9tTX2sfkhAJ:social.msdn.microsoft.com/Forums/en/clr/thread/2677c0b6-6b3c-4a51-9fcc-c2d8838c7b8b+compiled+IL

Ответы [ 4 ]

1 голос
/ 10 октября 2010

Возможно, вы ищете компоновщик, который возьмет вашу библиотеку .NET и ссылки на сборки и создаст исполняемый файл или .dll, которые могут работать без установки .NET.

Два коммерческих варианта для этого

Это также возможно с mono .У него есть утилита под названием mkbundle , которая прекомпилирует и добавляет зависимости, но вам потребуется Cygwin и немного больше опыта, чтобы заставить его работать.Этот вопрос кажется хорошим началом: Как преобразовать простой консольный проект .Net a в переносимый exe с Mono и mkbundle? .

1 голос
/ 06 октября 2010

вы можете разместить среду CLR в приложении C ++ и затем вызывать методы в размещенной среде

Джефф Рихтер имеет примеры

1 голос
/ 07 октября 2010

Вы можете разместить CLR внутри собственного процесса, используя COM API, предоставляемый с Windows SDK. IIS, SQL Server и некоторые другие продукты делают именно это. Фактически вы можете написать свою собственную замену ASP.Net, которая теоретически обрабатывает запросы от IIS. У меня нет опыта, чтобы поделиться, хотя. Проверьте ссылки ниже:

http://msdn.microsoft.com/en-us/magazine/cc163567.aspx
http://msdn.microsoft.com/en-us/library/9x0wh2z3%28VS.90%29.aspx

0 голосов
/ 07 сентября 2010

Хотя VS явно не поддерживает это, .Net позволяет ссылаться на сборку .exe jst так же, как и на сборку .dll, и вызывать публичные классы.

Конечно, если код, который вам нужно вызвать, является частным или внутренним, вам, возможно, придется прибегнуть к рефлексии, чтобы заставить его работать.

Если вам действительно нужно переместить код в ваш .dll, вы можете попробовать ILMerge, чтобы создать один двоичный файл. Однако я не пробовал использовать ILMerge со сборкой, ссылающейся на другую сборку .exe.

...