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

.NET工具打包时如何排除框架程序集?

问题描述

我正在创建一个.NET工具项目,项目文件如下:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <PackAsTool>true</PackAsTool>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="System.Text.Json" Version="9.0.0" />
  </ItemGroup>
</Project>

执行dotnet pack命令后,生成的NuGet包中包含了System.Text.Json。我希望精简工具体积,使其使用客户端计算机上已安装的.NET框架。我知道使用dotnet publish命令并设置SelfContained=false和PublishTrimmed=true可以实现精简,但这样无法生成.NET工具,请问该如何解决?

解决方案

要实现框架依赖型的.NET工具打包并精简体积,可通过以下方式处理:

  • 替换依赖引用类型
    对于.NET 8及以上版本自带的System.Text.Json,无需通过PackageReference引入,直接改用FrameworkReference关联框架自带组件,这样打包时不会将该库纳入NuGet包:

    <ItemGroup>
      <FrameworkReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>
    

    注:Microsoft.AspNetCore.App包含了System.Text.Json,若仅需单独引用该组件,可直接指定对应框架项,但引用完整App框架更便于后续扩展。

  • 打包时传递框架依赖与裁剪参数
    执行dotnet pack时,直接传入框架依赖和裁剪参数,这些参数会作用于内部的发布流程,生成框架依赖型的工具包:

    dotnet pack -c Release /p:SelfContained=false /p:PublishTrimmed=true
    
  • 验证工具包内容
    打包完成后,解压生成的NuGet包,检查tools/net8.0目录下仅包含你的工具程序集,无框架自带库即可。安装工具后,客户端会自动从本地已安装的.NET框架中加载所需依赖。

内容的提问来源于stack exchange,提问作者stavn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:34:51