ildasm и динамические исполняемые файлы - PullRequest
0 голосов
/ 06 апреля 2010

Я пытаюсь создать приложение, которое может изменить свойства в IL для создания немного другого исполняемого файла. E.g Клиент A запускает приложение и метка на ярлыке WinForm гласит: «Клиент A:». Клиент B запускает приложение, и Метка говорит "Клиент B". Легко я знаю, используя конфигурационные файлы или файлы ресурсов, но это не вариант для этого проекта. Основная программа должна иметь возможность динамически генерировать файл .exe на основе некоторых полей формы, введенных пользователем.

Мое решение состояло в том, чтобы создать автономный исполняемый файл, который содержал бы все элементы, которые мне были необходимы для создания динамического. Затем я использовал ildasm для генерации IL и подумал, что могу использовать этот IL и заменить теги элементами, которые я хотел сделать динамическими. Затем я мог бы заменить эти теги во время выполнения после того, как пользователь заполнил форму с помощью регулярных выражений и т. Д. Проблема в том, что если я сохраню IL-файл, сгенерированный ILDASM, как исполняемый файл и попытаюсь его запустить. Я просто запускаю консоль и ничего не делаю.

Я поступаю неправильно? Я не хотел вникать в Reflection, поскольку динамический .exe - действительно простой, и я думал, что реинжиниринг IL с ildasm будет самым быстрым способом.

Ваши мысли и указатели очень ценятся. Тони

Ответы [ 2 ]

0 голосов
/ 09 апреля 2010

Когда вы говорите «повторно сохранить» файл, созданный ildasm, и запускаете его, вы имеете в виду, что вы запускаете все файлы IL через ilasm (предоставленный компилятор Microsoft IL)? Если нет, вы можете попробовать это. Будьте очень осторожны при выполнении замещения, поскольку у IL есть довольно специфические требования, и ilasm не так прост, как компиляторы более высокого уровня, такие как csc и vbc.

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

Если вы собираетесь продолжить маршрут доставки исходного кода и его компиляции, вы можете выполнить то же самое без участия IL, отправив исходный код C # и скомпилировав его на месте, поскольку csc включен в каркас .

0 голосов
/ 06 апреля 2010

Исполняемый файл генерируется на месте? Или вы генерируете исполняемый файл для клиента, а затем отправляете результат?

Если вы генерируете исполняемый файл, вы можете поместить пользовательские данные / код в отдельную DLL-библиотеку и встроить их в свой исполняемый файл как ресурс, а затем загрузить его при возникновении события AppDomain.CurrentDomain.AssemblyResolve.

Таким образом, вы можете контролировать версию данных клиента.

...