前言

本文关注的是asp.net的Global.asax文件中 Application_Start的执行时机以及asp.net core中program.cs的main函数(重点是startup)的执行时机

1.Asp.Net

在Application_Start中添加了如下代码

 try
                {
                    var iplist = Dns.GetHostAddresses(Dns.GetHostName()).ToList();
                    System.IO.File.WriteAllText(@"D:\Log\log.txt", iplist.Select(p => p.ToString()).PackJson(), Encoding.UTF8);
                    if (iplist.Exists(p => p.ToString().Contains("10.xxx.xx.28")))//test_qa为10.xxx.xx.28特定机器的标记
                    {
                        System.IO.File.AppendAllText(@"D:\Log\log.txt", "当前机器是28", Encoding.UTF8);
                        TurboMQConsumerConfig.Consumer();//MQ消费
                    }
                    else
                    {
                        System.IO.File.AppendAllText(@"D:\Log\log.txt", "当前机器不是28", Encoding.UTF8);
                    }
                }
                catch (Exception ex) { 
                
                }
  • 【×】只重新生成,日志没有产生。结论:项目构建重新生成并不会触发Application_Start
  • 【√】设为启动项后启动(F5),产生日志。结论:项目启动执行触发Application_Start
  • 【√】只重新生成了,然后通过url地址直接请求,产生日志。结论:url执行触发Application_Start

2.Asp.Net Core

在Startup中添加了如下代码

var iplist = Dns.GetHostAddresses(Dns.GetHostName()).ToList();
                    System.IO.File.WriteAllText(@"D:\Log\logcore.txt", iplist.Select(p => p.ToString()).PackJson(), Encoding.UTF8);
                    string myEnvironmentValue = Environment.GetEnvironmentVariable("test_qa", EnvironmentVariableTarget.Process);
                    if (iplist.Exists(p => p.ToString().Contains("10.101.72.28")))//test_qa为10.101.72.28特定机器的标记
                    {
                        System.IO.File.AppendAllText(@"D:\Log\logcore.txt", "当前机器是28", Encoding.UTF8);
                    }
                    else
                    {
                        System.IO.File.AppendAllText(@"D:\Log\logcore.txt", "当前机器不是28", Encoding.UTF8);
                    }
                    if (myEnvironmentValue == "test_qa")//test_qa为10.101.72.28特定机器的标记
                    {
                        TurboMQConsumer<PollMQRegister>.GetInstanse();
                    }
  • 【×】只重新生成,日志没有产生。结论:项目构建重新生成并不会触发Startup
  • 【√】设为启动项后启动(F5),产生日志。结论:项目启动执行触发Startup
  • dotnet core 必须run了才能访问url,不是部署在iis上的。