2016-12-13 2 views
0

Я уверен, что это просто, но я не могу найти объяснения.C# дизассемблирование по умолчанию пространство имен модуль класса

При разборке .net с помощью ILSpy или ILDASM в пространстве имен по умолчанию есть класс <module>.

Почему и как его компилирует? у меня есть это:

using abc; 
using System; 

internal class <Module> 
{ 
    static <Module>() 
    { 
     AssemblyLoader.Attach(); 
    } 
} 
internal interface ISomething 
{ 
} 

Это не декларация стандарт. Если я воссоздаю проект C#, как бы добавить это? Также способ, которым я его вижу, находится в статическом конструкторе и будет выполняться перед точкой входа, поэтому, если я поместил AssemblyLoader.Attach(); в свой Main() или в статический конструктор Program (я использую шаблон консольного приложения), это должно сделать трюк, не так ли?

+0

[C# - понимать имя класса add <> symbol] (http://stackoverflow.com/questions/19615662/how-to-understand-the-class-name-add-symbol) –

+0

[Инициализаторы модулей в C# ] (http://stackoverflow.com/a/17379410/399414) –

+0

Это незаконный синтаксис для C#, но не для IL. Компилятор генерирует эти типы неявных классов все время по множеству причин. Короткий ответ: нет, вы не можете воссоздать это. – Abion47

ответ

3

Вы не можете добавить код прямо к <Module> из кода VS или C#. Вы можете сделать это с IL.

Если вы разобрали свой код, вы можете поставить статический .cctor, который в конечном итоге станет конструктором <Module>. Он должен быть вне любого .class

.method private hidebysig specialname rtspecialname static void .cctor() cil managed 
{ 
    //put your code here 
} 

Вы можете увидеть an example в моем репо на GitHub.

Используйте инструмент Fody и, в частности, ModuleInit.

+0

Я понимаю, но я хотел бы сделать это в своем коде на C#. Мне не нужно выводить один и тот же результат, мне просто нужен метод, который будет называться соответствующим образом. – JDOE

+0

@JODE - закрытие объекта C# - использование Fody. Там вы можете отметить один из ваших методов C#, который будет введен в модуль. Но все равно делается так же, просто вам не нужно знать подробности, как это делается. –

Смежные вопросы