如何为.NET Framework创建仅打包NuGet包的项目
解决方案:创建无自身输出的NuGet引用收集项目
核心思路
要彻底避免生成项目自身的DLL/PDB,需要从MSBuild的编译和输出环节直接切断自身产物的生成逻辑,同时保留NuGet包的还原与复制流程。
完整csproj配置
直接替换原有项目文件为以下内容,按需调整目标框架和引用包:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <!-- 可根据需求改为net7.0/net8.0等 --> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <EnableDefaultCompileItems>false</EnableDefaultCompileItems> <EnableDefaultItems>false</EnableDefaultItems> <NoBuild>false</NoBuild> <GeneratePackageOnBuild>false</GeneratePackageOnBuild> </PropertyGroup> <ItemGroup> <!-- 这里添加需要引用的NuGet包 --> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> <Target Name="CleanSelfOutputs" AfterTargets="Build"> <!-- 兜底删除可能残留的自身输出文件 --> <Delete Files="$(OutputPath)$(AssemblyName).dll" /> <Delete Files="$(OutputPath)$(AssemblyName).pdb" /> <Delete Files="$(OutputPath)$(AssemblyName).xml" /> </Target> </Project>
配置细节说明
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>:禁用默认编译规则,因为项目无源码,无需编译任何文件<Compile>None</Compile>:明确声明没有需要编译的文件<EnableDefaultItems>false</EnableDefaultItems>:关闭默认文件自动包含逻辑,防止意外引入文件触发编译<GenerateAssemblyInfo>false</GenerateAssemblyInfo>:不自动生成AssemblyInfo相关文件,减少无用输出CleanSelfOutputs目标:作为最后保障,即使有遗漏的自身产物,也会在构建完成后自动删除
验证方法
执行dotnet build后,查看输出目录(默认是bin/Debug/[目标框架]):只会看到NuGet包对应的DLL文件(比如Newtonsoft.Json.dll),完全没有项目自身生成的ClassLibrary.dll、PDB等文件。
内容的提问来源于stack exchange,提问作者Thomas Shephard
相关产品推荐
相关产品推荐

