Изменить тип приложения с помощью Mono.Cecil?

Как я могу изменить приложение из Типа консольного приложения в Тип приложения Windows и наоборот с Mono.Cecil?

2 ответа

Решение

Чтобы преобразовать консоль.exe в windows .exe, вы можете использовать:

var file = "foo.exe";
var module = ModuleDefinition.ReadModule (file);
// module.Kind was previously ModuleKind.Console
module.Kind = ModuleKind.Windows;
module.Write (file);

Обратный путь так же прост, как выбор соответствующего значения ModuleKind. Из источника Сесила:

public enum ModuleKind {
    Dll,
    Console,
    Windows,
    NetModule,
}

Для людей, которым нужна дополнительная помощь в этом, как я :)

вам может понадобиться подходящий пакет libmono-cecil-cil-dev

      //mono-cecil-set-modulekind-windows.cs
using System;
using Mono.Cecil;

namespace CecilUtilsApp {
    class CecilUtils {
        static void Main(string[] args) {
            var file = args[0];
            var module = ModuleDefinition.ReadModule (file);
            module.Kind = ModuleKind.Windows;
            module.Write (file);
        }
    }
}

// -----
//Makefile
//mono-cecil-set-modulekind-eq-windows.exe:
//    mcs $(shell pkg-config --libs mono-cecil) ./mono-cecil-set-modulekind-windows.cs
      ./mono-cecil-set-modulekind-windows.exe myprog.exe
Другие вопросы по тегам