You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在控制台应用中集成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:36:06