ASP.NET Core 应用程序的启动与配置:Program.cs 文件的全面解析
ASP.NET Core 应用程序的启动与配置:Program.cs 文件的全面解析
Program.cs
是 ASP.NET Core 应用程序的入口点,负责应用程序的启动和配置。以下是 Program.cs
文件中完成的主要工作,按逻辑步骤进行总结:
1. 创建和配置主机环境
- 创建 WebApplication 构建器:
- 使用
WebApplication.CreateBuilder(args)
创建一个WebApplicationBuilder
实例,该实例用于配置应用程序的主机和服务。 - 自动加载配置文件(如
appsettings.json
)和命令行参数,并设置日志记录、依赖注入等基础功能。
- 使用
2. 获取配置和环境对象
- 获取配置和环境信息:
- 通过
builder.Configuration
获取应用程序的配置对象,可以从多个来源(如appsettings.json
、环境变量等)读取配置。 - 通过
builder.Environment
获取当前的运行环境(如开发、生产等),以便根据不同的环境配置中间件和行为。 - 创建并配置日志记录器,确保可以在
Program.cs
中记录日志,使用控制台输出日志。
- 通过
3. 加载和验证应用程序设置
- 加载
AppSettings
:- 从配置中加载
AppSettings
配置节,并将其绑定到AppSettings
类型的对象。 - 将
AppSettings
注册到依赖注入容器中,以便后续可以注入到其他服务中。 - 记录一条调试日志,表明
AppSettings
已成功加载。
- 从配置中加载
4. 配置 Application Insights
- 启用 Application Insights:
- 如果
AppSettings
中启用了 Application Insights,则调用AddApplicationInsightsTelemetry()
来配置和启用 Application Insights 监控。 - 记录一条跟踪日志,表明 Application Insights 已配置。
- 如果
5. 配置 API 版本控制
- 添加 API 版本控制:
- 使用
AddApiVersioning()
配置 API 版本控制,确保 API 请求能够根据 URL 或请求头中的版本信息路由到正确的控制器和操作。 - 启用 API 版本报告,并设置默认版本为
1.0
。 - 使用
AddVersionedApiExplorer()
启用 API 版本探索功能,自动注册IApiVersionDescriptionProvider
,以便在 Swagger 中显示不同版本的 API 文档。
- 使用
6. 配置 Swagger 和 API 文档
- 启用 Swagger:
- 如果
AppSettings
中启用了 Swagger,则配置 Swagger 和 Swagger UI。 - 注册
ConfigureSwaggerOptions
以自定义 Swagger 的生成选项。 - 通过
AddSwaggerGen()
配置 Swagger 文档生成,包括从 XML 注释文件中提取注释。 - 确保每个 API 版本都有对应的 Swagger 文档端点,并在 Swagger UI 中显示。
- 如果
7. 配置依赖注入
- 注册业务服务和映射:
- 调用
ConfigureMappings()
和ConfigureBusinessServices()
方法,注册应用程序所需的业务服务和映射配置。 - 这些方法通常会配置数据访问层、业务逻辑层等服务,并将它们注册到依赖注入容器中。
- 调用
8. 构建应用程序
- 构建
WebApplication
实例:- 调用
builder.Build()
构建WebApplication
实例,完成所有配置和服务的初始化。 app
是WebApplication
的实例,用于配置 HTTP 请求管道并启动应用程序。
- 调用
9. 配置 HTTP 请求管道
- 配置中间件:
- 根据当前环境配置不同的中间件:
- 开发环境:启用开发者异常页面,方便调试。
- 生产环境:启用自定义异常处理中间件,捕获未处理的异常并返回适当的错误响应;启用 HTTPS 重定向和 HSTS(HTTP 严格传输安全)。
- 配置常见的中间件,如
UseHttpsRedirection()
、UseRouting()
、UseAuthorization()
和UseRequestLocalization()
,确保请求正确路由和授权。 - 使用
UseEndpoints()
配置终结点映射,将请求路由到控制器。
- 根据当前环境配置不同的中间件:
10. 配置 Swagger UI
- 启用 Swagger UI:
- 如果
AppSettings
中启用了 Swagger,并且 API 版本控制已配置,则启用 Swagger UI。 - 通过
IApiVersionDescriptionProvider
获取所有 API 版本的描述,并为每个版本配置相应的 Swagger 文档端点。 - 确保每个版本的 API 文档都能在 Swagger UI 中正确显示。
- 如果
11. 启动应用程序
- 启动 WebApplication:
- 最后,调用
app.Run()
启动应用程序,使其开始监听传入的 HTTP 请求并处理它们。
- 最后,调用
总结
Program.cs
文件的主要职责是:
- 配置应用程序的主机和服务,包括加载配置、设置日志记录、启用监控(如 Application Insights)、配置 API 版本控制和 Swagger 文档。
- 构建 HTTP 请求管道,配置中间件以处理请求、路由、授权和异常处理。
- 启动应用程序,使其开始监听和处理 HTTP 请求。
通过这些步骤,Program.cs
确保了应用程序的正确初始化和运行,提供了良好的开发和生产环境支持。
Program.cs解释如下
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System;
using System.IO;
using System.Linq;
using System.Reflection;// 创建 WebApplication 构建器,它会读取命令行参数并初始化主机环境。
var builder = WebApplication.CreateBuilder(args);// 获取应用程序的配置对象(Configuration)和环境对象(Environment)
// 这些是 ASP.NET Core 应用程序的基础组件,用于访问配置文件和环境信息。
var configuration = builder.Configuration;
var env = builder.Environment;// 使用构建的服务提供者提前创建日志记录器实例。
// 这样可以在 Program.cs 中使用日志记录功能,而不需要依赖 Startup 类。
var serviceProvider = builder.Services.BuildServiceProvider();
var logger = serviceProvider.GetRequiredService<ILogger<Program>>();// 从配置中获取 AppSettings 配置节。
// AppSettings 是应用程序的主要配置部分,通常包含应用程序的运行时设置。
var appsettingsConfigurationSection = configuration.GetSection(nameof(AppSettings));// 如果没有找到 AppSettings 配置节,则抛出异常,确保应用程序不会在缺少关键配置的情况下启动。
if (appsettingsConfigurationSection == null)throw new Exception("No appsettings has been found");// 将 AppSettings 配置节绑定到 AppSettings 类型的对象,并注册到依赖注入容器中。
// 这使得 AppSettings 可以通过依赖注入在应用程序的其他部分使用。
var appSettings = appsettingsConfigurationSection.Get<AppSettings>();
builder.Services.Configure<AppSettings>(appsettingsConfigurationSection);
logger.LogDebug("AppSettings loaded for DI"); // 记录日志,表明 AppSettings 已加载到依赖注入容器中。// 从配置中获取 ApplicationInsights 配置节,并检查是否启用了 Application Insights。
// Application Insights 是一个应用性能管理服务,用于监控应用程序的性能和使用情况。
var applicationInsightsConfiturationSection = configuration.GetSection(nameof(ApplicationInsights));
if (applicationInsightsConfiturationSection != null && applicationInsightsConfiturationSection.Get<ApplicationInsights>().Enabled)
{// 如果启用了 Application Insights,则添加 Application Insights 的遥测服务。// 这将使应用程序能够发送遥测数据到 Azure Monitor。builder.Services.AddApplicationInsightsTelemetry();logger.LogTrace("Configuring Application Insights"); // 记录日志,表明正在配置 Application Insights。
}try
{if (appSettings.IsValid()){logger.LogDebug("Valid AppSettings"); // 记录日志,表明 AppSettings 有效。// 添加 MVC 控制器支持,并设置默认返回的内容类型为 JSON。// ProducesAttribute 确保所有控制器操作默认返回 JSON 格式的数据。builder.Services.AddControllers(opt =>{opt.Filters.Add(new ProducesAttribute("application/json"));}).SetCompatibilityVersion(CompatibilityVersion.Latest);// 添加 API 版本控制支持,设置默认版本为 1.0,并启用 URL 段读取版本号。// 这允许应用程序根据 URL 中的版本号来区分不同的 API 版本。builder.Services.AddApiVersioning(o =>{o.ReportApiVersions = true;o.AssumeDefaultVersionWhenUnspecified = true;o.DefaultApiVersion = new ApiVersion(1, 0);o.ApiVersionReader = new UrlSegmentApiVersionReader();});// 添加 API 版本探索支持,以便 Swagger 可以显示不同版本的 API。// GroupNameFormat 设置了 API 版本的命名格式,SubstituteApiVersionInUrl 确保版本号出现在 URL 中。builder.Services.AddVersionedApiExplorer(options =>{options.GroupNameFormat = "'v'VVV";options.SubstituteApiVersionInUrl = true;});// 如果启用了 Swagger,则配置 Swagger 和 Swagger UI。// Swagger 是一个工具,用于生成和展示 API 文档。if (appSettings.Swagger.Enabled){// 注册 Swagger 选项配置类,用于自定义 Swagger 的行为。builder.Services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();// 配置 Swagger 生成器,包括操作过滤器和 XML 文档注释。// XML 文档注释提供了 API 方法的详细说明,帮助开发者更好地理解 API。builder.Services.AddSwaggerGen(options =>{options.OperationFilter<SwaggerDefaultValues>();// 获取当前程序集及其引用的所有程序集。var allAssemblies = new[] { Assembly.GetExecutingAssembly() }.Union(Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select(a => Assembly.Load(a)));// 遍历所有程序集,查找并包含对应的 XML 文档注释文件。foreach (var assembly in allAssemblies){var xmlFile = $"{assembly.GetName().Name}.xml";var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);if (File.Exists(xmlPath)){options.IncludeXmlComments(xmlPath);}}});}// 注册映射和业务服务配置。// 这些配置可能包括 AutoMapper 映射、数据库上下文、服务注册等。builder.Services.ConfigureMappings();builder.Services.ConfigureBusinessServices(configuration);logger.LogDebug("ApiVersioning, Swagger and DI settings configured"); // 记录日志,表明 API 版本控制、Swagger 和依赖注入已配置完成。}else{logger.LogDebug("Invalid AppSettings"); // 记录日志,表明 AppSettings 无效。}
}
catch (Exception ex)
{// 捕获配置过程中可能出现的任何异常,并记录错误信息。// 这有助于在应用程序启动失败时进行调试。logger.LogError(ex.Message);
}// 构建 WebApplication 实例,准备启动应用程序。
var app = builder.Build();// 配置 HTTP 请求管道,根据环境选择不同的中间件。
logger.LogTrace("Configuring HTTP request pipeline"); // 记录日志,表明开始配置 HTTP 请求管道。
logger.LogDebug($"Environment: {env.EnvironmentName}"); // 记录当前环境名称。try
{if (env.IsDevelopment()){// 在开发环境中,使用开发者异常页面,提供更详细的错误信息。// 开发者异常页面会显示完整的堆栈跟踪,帮助开发者快速定位问题。app.UseDeveloperExceptionPage();logger.LogInformation("Developer exception page loaded."); // 记录日志,表明开发者异常页面已加载。}else{// 在生产环境中,使用自定义的异常处理中间件,并启用 HSTS(HTTP 严格传输安全)。// 自定义异常处理中间件捕获未处理的异常,并返回友好的错误响应。app.UseExceptionHandler(a => a.Run(async context =>{var feature = context.Features.Get<IExceptionHandlerPathFeature>();var exception = feature.Error;var code = HttpStatusCode.InternalServerError;// 根据异常类型设置适当的 HTTP 状态码。if (exception is ArgumentNullException) code = HttpStatusCode.BadRequest;else if (exception is ArgumentException) code = HttpStatusCode.BadRequest;else if (exception is UnauthorizedAccessException) code = HttpStatusCode.Unauthorized;// 记录全局错误处理器捕获的异常信息。logger.LogError($"GLOBAL ERROR HANDLER::HTTP:{code}::{exception.Message}");// 使用 Newtonsoft.Json 序列化异常信息,并将其作为 JSON 响应返回给客户端。var result = Newtonsoft.Json.JsonConvert.SerializeObject(exception, Newtonsoft.Json.Formatting.Indented);context.Response.Clear();context.Response.ContentType = "application/json";await context.Response.WriteAsync(result);}));// 启用 HSTS,强制浏览器只通过 HTTPS 访问应用程序。app.UseHsts();}// 使用 HTTPS 重定向中间件,强制所有请求通过 HTTPS。// 这确保了即使用户通过 HTTP 访问,也会被自动重定向到 HTTPS。app.UseHttpsRedirection();// 使用路由中间件,解析 URL 并分发到相应的控制器或处理器。// 路由中间件负责将传入的 HTTP 请求映射到正确的控制器和操作。app.UseRouting();// 使用授权中间件,执行身份验证和授权逻辑。// 授权中间件确保只有经过身份验证和授权的用户才能访问受保护的资源。app.UseAuthorization();// 使用请求本地化中间件,设置应用程序的区域性。// 请求本地化中间件可以根据用户的语言和文化设置来调整应用程序的行为。app.UseRequestLocalization();// 使用终结点中间件,映射控制器路由。// 终结点中间件负责实际处理 HTTP 请求并将响应返回给客户端。app.UseEndpoints(endpoints =>{endpoints.MapControllers();});// 如果启用了 Swagger,则配置 Swagger UI。// Swagger UI 提供了一个交互式的界面,开发者可以通过它浏览和测试 API。if (appSettings.IsValid() && appSettings.Swagger.Enabled){// 使用 Swagger 中间件,提供 API 文档。app.UseSwagger();// 使用 Swagger UI 中间件,提供交互式的 API 文档界面。app.UseSwaggerUI(options =>{// 获取 API 版本描述提供者,用于生成不同版本的 Swagger 文档。var provider = app.ServiceProvider.GetRequiredService<IApiVersionDescriptionProvider>();// 为每个 API 版本添加 Swagger 端点。foreach (var description in provider.ApiVersionDescriptions){options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());}});}
}
catch (Exception ex)
{// 捕获配置 HTTP 请求管道过程中可能出现的任何异常,并记录错误信息。// 这有助于在应用程序启动失败时进行调试。logger.LogError(ex.Message);
}// 启动应用程序,开始监听传入的 HTTP 请求。
// 一旦应用程序启动,它将开始处理来自客户端的 HTTP 请求。
app.Run();
逐行解释
-
引入命名空间:这些命名空间包含了 ASP.NET Core 所需的各种类和接口,例如
WebApplication
、IConfiguration
、ILogger
等。 -
创建 WebApplication 构建器:
WebApplication.CreateBuilder(args)
是 .NET 6+ 推荐的方式,用于创建和配置应用程序的主机环境。它会自动加载配置文件(如appsettings.json
)、设置日志记录等。 -
获取配置和环境对象:
configuration
和env
是 ASP.NET Core 应用程序的基础组件,分别用于访问配置文件和环境信息。configuration
用于读取应用程序的配置,env
用于确定当前的运行环境(如开发、生产等)。 -
创建日志记录器实例:我们使用
builder.Services.BuildServiceProvider()
提前创建IServiceProvider
,从而可以在Program.cs
中获取ILogger<Program>
实例。这与你在Startup
构造函数中获取ILogger<Startup>
的方式一致。 -
加载 AppSettings 配置节:从配置文件中获取
AppSettings
配置节,并检查其是否存在。如果不存在,则抛出异常,确保应用程序不会在缺少关键配置的情况下启动。 -
注册 AppSettings 到依赖注入容器:将
AppSettings
配置节绑定到AppSettings
类型的对象,并注册到依赖注入容器中。这样可以在应用程序的其他部分通过依赖注入使用AppSettings
。 -
配置 Application Insights:从配置文件中获取
ApplicationInsights
配置节,并检查是否启用了 Application Insights。如果启用了,则添加 Application Insights 的遥测服务,使应用程序能够发送遥测数据到 Azure Monitor。 -
检查 AppSettings 是否有效:如果
AppSettings
有效,则继续配置其他服务;否则,记录日志并跳过后续配置。 -
添加 MVC 控制器支持:配置 MVC 控制器,设置默认返回的内容类型为 JSON。
ProducesAttribute
确保所有控制器操作默认返回 JSON 格式的数据。 -
添加 API 版本控制支持:配置 API 版本控制,设置默认版本为 1.0,并启用 URL 段读取版本号。这允许应用程序根据 URL 中的版本号来区分不同的 API 版本。
-
添加 API 版本探索支持:配置 API 版本探索,以便 Swagger 可以显示不同版本的 API。
GroupNameFormat
设置了 API 版本的命名格式,SubstituteApiVersionInUrl
确保版本号出现在 URL 中。 -
配置 Swagger:如果启用了 Swagger
相关文章:
ASP.NET Core 应用程序的启动与配置:Program.cs 文件的全面解析
ASP.NET Core 应用程序的启动与配置:Program.cs 文件的全面解析 Program.cs 是 ASP.NET Core 应用程序的入口点,负责应用程序的启动和配置。以下是 Program.cs 文件中完成的主要工作,按逻辑步骤进行总结: 1. 创建和配置主机环境…...
2020-12-02 数字过滤
缘由 C语言 数组:数字过滤-CSDN问答 void chuli(int n15236) {int aa[47]{0},j0,m0;while(n)aa[j]n%10,n/10;while(j)if(aa[--j]%2)m*10,maa[j];cout << m << ends; } void 数字过滤(int n 15236) {int aa[47]{0}, j 0, m 0;while (…...

长短期记忆神经网络(LSTM)介绍
1、应用现状 长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多,很容易出现梯度爆炸或者梯度消失的问题,导致无法处理较长序列数据,从而无…...

数据结构 ——二叉树转广义表
数据结构 ——二叉树转广义表 1、树转广义表 如下一棵树,转换为广义表 root(c(a()(b()()))(e(d()())(f()(j(h()())())))) (根(左子树)(右子树)) 代码实现 #include<stdio.h> #include<stdlib.h>//保存…...
chattts生成的音频与字幕修改完善,每段字幕对应不同颜色的视频,准备下一步插入视频。
上一节中,实现了先生成一个固定背景的与音频长度一致的视频,然后插入字幕。再合并成一个视频的方法。 但是:这样有点单了,所以: 1.根据字幕的长度先生成视频片断 2.在片段上加上字幕。 3.合并所有片断,…...

数据结构开始——时间复杂度和空间复杂度知识点笔记总结
好了,经过了漫长的时间学习c语言语法知识,现在我们到了数据结构的学习。 首先,我们得思考一下 什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素…...

路由策略与策略路由
路由策略 常用有Router-Policy,Filter-Policy等 控制路由是否可达,通过修改路由条目相关参数影响流量的转发 基于控制平面,会影响路由表表项,但只能基于目地址进行策略判定,于路由协议相结合使用 Router-Policy …...
pytorch_fid 安装笔记
目录 torch安装: pytorch_fid安装 torch安装: pip install torch2.5.0 --index-url https://download.pytorch.org/whl/cu121 pytorch_fid安装 pip install pytorch_fid 安装后,torch也会自动安装,导致torch引用报错。...

Qt绘制仪表————附带详细说明和代码示例
文章目录 1 效果2 原理3 编码实践3.1 创建仪表属性类3.2 设置类属性3.3 绘制图案3.3.1 设置反走样3.3.2 绘制背景3.3.3 重新定义坐标原点3.3.4 绘制圆环3.3.5 绘制刻度线3.3.6 绘制刻度线上的描述值3.3.7 绘制指针3.3.8 绘制指针数值和单位3.3.9 控制指针变化 扩展福利参考 1 效…...

百度地图JavaScript API核心功能指引
百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富、交互性强的地图应用,包含了构建地图基本功能的各种接口,提供了诸如本地搜索、路线规划等数据服务。百度地图JavaScript API支持HTTP和HT…...

mp4影像和m4a音频无损合成视频方法
第一步:复制高清视频地址 url 第二步:打开网址粘贴复制的视频url视频下载 第三步:下载-影像.mp4和-音频.m4a 第四步:合并视频; 使用ffmpeg进行无损合成(如果没有安装ffmpeg请自行下载安装下载 FFmpeg (p2hp.com)&…...
Ubuntu下将Julia嵌入Jupyter内核
一.安装 Julia 如果 Julia 尚未安装: 打开终端,下载最新的 Julia 安装包: wget https://julialang-s3.julialang.org/bin/linux/x64/1.9/julia-1.9.3-linux-x86_64.tar.gz 解压并移动到 /opt: tar -xvzf julia-1.9.3-linux-x86_…...

openGauss开源数据库实战二十五
文章目录 任务二十五 openGauss 数据库的物理备份与恢复任务目标实施步骤一、为进行物理备份做准备1.确保数据库工作在归档模式2.创建保存数据库物理备份的目录3.创建保存归档日志备份的目录 二、进行openGauss数据库的物理备份1.备份数据库2.切换WAL3.备份归档日志 三、openGa…...
[C/C++] List相关操作
List相关操作 1 链表二分 目标: (1)对于偶数节点,正好对半分; (2)对于奇数节点,前 后 1 (3)断开链表,方便后期合并 // 使用快慢指针完成中点…...

继电器控制与C++编程:实现安全开关控制的技术分享
在现代生活中,继电器作为一种重要的电气控制元件,在电气设备的安全控制中起到了至关重要的作用。通过低电流控制高电流,继电器能够有效地隔离控制电路与被控设备,从而保障使用者的安全。本项目将介绍如何通过树莓派Pico与继电器模块结合,使用C++编程实现继电器的控制。 一…...
题解 - 找子序列(2024.12上海月赛丙组T4)
题目描述 Dave 有一个长度为 n 的非负整数序列 a1-n, 和一个非负整数 m 。 他希望知道是否有一个 a 的非空子序列,使得子序列中所有元素的按位与(bitwise AND)结果为 m。 换言之,他想知道是否存在一个下标序列 i1-k(k ≥ 1),满足 1 ≤ i1 < i2 < …...

在centos 7.9上面安装mingw交叉编译工具
1.说明 为了在centos上面编译windows的程序,需要安装mingw工具,mingw工具是可以编译windows程序的一些工具链,使用方式和linux一致 2.下载脚本 使用脚本方式编译,github的脚本位置:https://github.com/Zeranoe/ming…...

ubuntu wine mobaxterm找不到串口和解决方案
安装好 打开MobaXterm时发现,没有可供选择的串口 我们再检查wine设备映射 ls -la ~/.wine/dosdevices/ 串口是存在的,我们再来一番神操作,并没有回滚操作,不知是否是必要修改 打开 注册表,在HKEY_LOCAL_MACHINE中的…...

如何编译安装系统settings设置应用(5.0.0-Release)
本文介绍如何在OpenHarmony 5.0.0 r版本中修改系统设置应用,并且编译安装到开发板上 开发环境 1.dayu200开发板 2.OpenHarmony 5.0.0r 固件 3.API12 full sdk (如果安装full sdk过程中出现报错hvigor ERROR: Cannot find module typescript,请参考 h…...

<项目代码>YOLOv8 车牌识别<目标检测>
项目代码下载链接 <项目代码>YOLOv8 车牌识别<目标检测>https://download.csdn.net/download/qq_53332949/90121387YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...

Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...