如何在控制台应用中集成ASP.NET Core Minimal API(轻量无冗余依赖)
在控制台应用(Microsoft.NET.Sdk)中集成ASP.NET Core Minimal API
一、修改项目配置(保留Microsoft.NET.Sdk)
无需切换到Microsoft.NET.Sdk.Web,仅需添加ASP.NET Core核心依赖包即可。编辑你的项目文件(.csproj):
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <!-- 根据需求选择目标框架,如net6.0/net7.0/net8.0 --> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <!-- 仅引入ASP.NET Core核心运行时,不含控制器、Razor等冗余依赖 --> <PackageReference Include="Microsoft.AspNetCore" Version="8.0.0" /> </ItemGroup> </Project>
这个包是ASP.NET Core的最小依赖集,不会引入Mvc、Razor等组件,能有效控制输出文件体积。
二、编写Minimal API逻辑(Program.cs)
直接在控制台程序入口中构建并启动Minimal API,同时保留控制台交互能力:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; // 构建WebApplication实例,用法与Web项目一致但依赖更轻量 var builder = WebApplication.CreateBuilder(args); // 无需添加Mvc相关服务,保持服务配置极简 // 日志、配置等默认功能已内置,无需额外配置 // 定义API端点 var app = builder.Build(); // 示例GET接口 app.MapGet("/api/hello", () => Results.Ok(new { Message = "Hello from Minimal API in Console App!", ConsoleAppRunning = true })); // 示例状态检查接口 app.MapGet("/api/status", () => Results.Ok(new { Status = "Running", Timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") })); // 后台启动API服务,不阻塞控制台主线程 var apiHostTask = app.RunAsync(); // 控制台原有业务逻辑 Console.WriteLine("控制台应用已启动,API服务运行中"); Console.WriteLine("访问地址:http://localhost:5000"); Console.WriteLine("按任意键停止服务并退出..."); Console.ReadKey(); // 优雅停止API服务 await apiHostTask; await app.StopAsync();
三、发布配置(保持Windows应用特性)
因使用Microsoft.NET.Sdk,发布时完全按照控制台应用方式配置,避免Web SDK带来的发布选项变更。例如,发布为Windows单文件自包含应用:
dotnet publish -c Release -r win-x64 --self-contained true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
该命令生成单个可执行文件,体积远小于Web SDK发布产物(net8.0下约30-40MB),部署方式与普通Windows控制台应用一致。
四、按需扩展(避免冗余依赖)
若需额外功能(如Swagger文档),仅添加对应轻量包即可,无需引入整套Mvc:
- 添加Swagger:引入
Swashbuckle.AspNetCore.Swagger和Swashbuckle.AspNetCore.SwaggerUI包,再在代码中配置:builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // ... app.UseSwagger(); app.UseSwaggerUI();
内容的提问来源于stack exchange,提问作者Liero
相关产品推荐
相关产品推荐

