.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
相关产品推荐
相关产品推荐

