首页 > 其他分享 >Program文件的作用

Program文件的作用

时间:2023-09-13 17:02:02浏览次数:41  
标签:文件 配置 主机 args Program cs 作用

Program.cs文件分析

Program.cs文件是至关重要的一个文件,它包含应用程序启动的代码,还可以配置所需要的服务和应用管道的中间件。

需要掌握:

版本注意:

在6.0版本之前(不含6.0)

6.0版本之前,在使用VS创建Web应用程序框架时,会生成Program.cs和**Startup.cs **2个类文件

Program.cs:

用于创建和运行主机。

该类包含2个方法:

  • 一个Main方法:是整个应用的入口方法,调用构建主机的静态方法,然后构建并运行。
  • 一个静态的构建主机的方法:用于配置主机服务,在3.0版本之前使用CreateWebHostBuilder()的方法用于构建WebHost,3.0至5.0版本使用CreateHostBuilder()构建通用主机Host。2个方法的区别以及WebHost和Host的区别请参考主机

2.1版本


 public class Program
    {
        public static void Main(string[] args)
        {
            // 获取并创建主机实例并运行起来 
    
            CreateWebHostBuilder(args).Build().Run();
        }

        /// <summary>
        /// 生成Web应用主机
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                // 反射调用Startup类
                .UseStartup<Startup>()
                // 使用Kestrel作为服务器并集成到IIS
                .UseKestrel()                 
                .UseIISIntegration()
                );
    }

3.1版本

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }
    /// <summary>
    /// 生成通用主机
    /// </summary>
    /// <param name="args"></param>
    /// <returns></returns>
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            // 虽然使用的是Host主机,但是同样也要配置WebHost,原因是需要告知web的默认配置
            // 大白话就是,需要告诉主机,你的web应用需要那些配置服务,就是指向Startup文件
            // 用于托管Web应用程序的默认值配置 
            .ConfigureWebHostDefaults(Builder =>
            {
                Builder.UseStartup<Startup>();
            });
}

StartUp.cs 类:

用于配置主机启动的时候,所需要的服务以及管道中间件。包含3个方法

  • 一个构造函数:可以提供一些属性给ConfigureServices()和Configure()使用
  • 一个ConfigureServices()方法:返回IServiceProvider的用于配置主机所需要的服务。
  • 一个无返回值的Configure()方法:用于配置管道中间件。

6.0及以后版本(目前是7.0)

6.0版本之后,微软使用最小托管模型来生成应用,使用最小托管模型仅仅4句代码就能创造一个NetCore应用

特点:

  • Program.cs和Startup.cs文件一起合并到Program.cs文件中(至于为什么这么做,微软给出的解释是为了降低学习成本)
  • Startup.cs中Configure()和ConfigureServices()方法不再使用,当然6.0版本是向下兼容的,所以还是可以使用Startup.cs文件来配置服务的。
  • 使用顶级语句最大程度减少应用代码
  • 使用全局using语句

最小托管模型:

请参考官方文档

// 得到应用构造器:WebApplicationBuilder
var builder = WebApplication.CreateBuilder(args);
// 配置日志
builder.Logging.AddLog4Net("ConfigFile/log4net.config");
// 得到应用:WebApplication
var app = builder.Build();
// 配置中间件
app.UseStaticFiles();
// 运行主机
app.Run();

衍生拓展

常见疑问:

  1. 为什么不把调用的WebHost.CreateDefaultBuilder() / Host.CreateDefaultBuilder()方法直接放在Main函数中,而再写一个CreatetWebHosBuilder() / CreateHostBuilder()方法包裹起来?

    答:因为是为了区分在Main函数中对生成的主机对象调用Run()的代码,比如在使用EF Core 的时候,就必须要有这种区分。

  2. Program.cs文件中CreateDefaultBuilder()方法的作用?

    答:无论是WebHost还是Host,他们调用各自的CreateDefaultBuilder()方法主要是执行以下任务

    1. 将根目录设置为Directory.GetCurrenDirectory()方法返回的路径
    2. 通过命令行、前缀为ASPNETCORE_的环境变量加载主机配置
    3. 加载应用配置,按照appsetting.json、appsetting.{Environment}.json、入口程序集的用户机密、环境变量、命令行参数
    4. 配置控制台和调试输出的日志记录
    5. 使用ASP NET Core模块在IIS后运行,默认会继承IIS
    6. 包含一些拓展方法,如ConfigureAppConfiguration()拓展配置

标签:文件,配置,主机,args,Program,cs,作用
From: https://www.cnblogs.com/boise/p/17700124.html

相关文章

  • 软件自动化测试对软件产品起到什么作用?有什么注意事项?
    自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。一、软件自动化测试的作用:1、提高测试效率:自动化测试可以大幅提高测试的效率,节省......
  • Linux实现查看文件内容的5种方式
    除了使用vi/vim编辑器查看文件内容和使用cat命令将文件所有内容展示到终端上以外,还有多种方式。1、more:分屏显示文件内容。   点击q键退出。    more与cat类似,只不过如果文件内容超过了当前终端一个屏幕能显示的大小,此时more命令就会在终端只显示一个屏幕的文件内容......
  • 好用的软件测试框架有哪些?测试框架的作用是什么?
    软件测试框架是现代软件开发过程中至关重要的工具,它可以帮助开发团队更加高效地进行测试和验证工作,从而大大提高软件质量和用户体验。一、好用的软件测试框架1.Selenium:作为一种开源的自动化测试框架,Selenium具有功能强大且灵活性高的特点。它支持多种开发语言,并且可......
  • Python pandas 读取 excel文件
    参考:https://www.jb51.net/article/283627.htm#单纯导出一个数据集defexportData_pandas(excelFile='output.xlsx'):try:#data={'Name':['Alice','Bob','Charlie'],#'Age':[......
  • Jmeter BeanShell, 读取HTTP请求返回的JSON,并将其存到文件中
    1、创建BeanShellSampler将fastjson-1.2.30.jar放到Jmeter安装目录\lib下 importjava.io.*;importcom.alibaba.fastjson.JSONObject;importjava.io.IOException;importjava.io.File;importjava.io.FileOutputStream;importjava.io.FileWriter;privatestat......
  • jvm-故障排查hs_pidxx-log日志文件
    概述##ThereisinsufficientmemoryfortheJavaRuntimeEnvironmenttocontinue.#Nativememoryallocation(mmap)failedtomap12288bytesforcommittingreservedmemory.#Possiblereasons:#ThesystemisoutofphysicalRAMorswapspace#In32......
  • dbv检查数据文件是否有坏块
     环境:OS:Centos7DB:11.2.0.4 1.ASM磁盘需要带上userid参数[oracle@rac01~]$dbvfile='+DATA/slnngk/datafile/users.259.1146388217'userid=oracle/oracleDBVERIFY:Release11.2.0.4.0-ProductiononWedSep1314:49:152023Copyright(c)1982,2011,O......
  • buildroot 构建根文件系统(8)添加网络时间同步
    一、开发背景构建最小系统后成功运行后,时间都是从初始化时间开始计算,形如:ThuJan 109:57:55UTC1970二、开发需求开机联网后自动从网络中获取最新的时间,同步到系统中三、开发环境LinuxUbuntu4.15.0-65-generic+buildroot-2023.02.3+i.mx6d(cortex-A9)......
  • flask 简单设置日志文件配置
    最近做了几个模型,需要配置接口提供使用,这时候就用到了日志系统首先创建一个logs.py文件,在文件中配置日志等级、保存路径、日志文件大小、日志输出格式importosimportloggingfromlogging.handlersimportRotatingFileHandler#获取当前绝对路径defget_cwd():r......
  • 如何把MarkDown文件转换为思维导图
    最近计划报名软考,想着第一轮复习先把教程看一遍,记记笔记。我一般记笔记的时候都是喜欢写成提纲和列表的形式,想着后期整理成思维导图记忆起来更加直观。那么除了手画一遍之外,有没有更便捷的方法呢?试了一下,可以用VSCode结合插件MarkMap实现。操作步骤如下:VSCode安装MarkMap插......