Main是函数的入口,也就是第一执行人,如何在Man函数之前运行一些代码呢?
有两种方法:
1.通过RunStartupHooks(DOTNET_STARTUP_HOOKS ),也就是添加环境变量的形式
点击查看代码
public class StartupHook
{
public static void Initialize()
{
Console.Write("Call Method Initialize\r\n");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadLine();
}
}
}
2.通过添加特性(ModuleInitializer)代码如下:
点击查看代码
public class ABC
{
[ModuleInitializer]
public static void AA()
{
Console.Write("Call Method AA\r\n");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadLine();
}
}
前者是CLR运行时调用的,主要是通过非托调用执行托管里面的.Net类库操作进行的,后者则是Rosyln编译的时候把特性标记的方法放入
在一些特殊的场景里可能会用到这样的一种应用方式,所以微软做了两种不同的选择方式,供你选择,前者可能更能灵活些,灵活到可以在程序里植入后门。或者可能安全性更高,但是同时也丧失了灵活度,对于选择,就看应用的需要了。
个人公众号: