批量将dll打包为Nuget包时体积一致偏大,如何指定nuspec的targetFramework
问题解答
1. 包体积异常原因及打包操作遗漏点
你当前的打包流程存在3个核心遗漏,直接导致所有包体积异常且大小一致:
- 默认生成的
.nuspec文件没有声明<files>节点指定需要打包的目标dll,nuget pack执行时会默认把当前工作目录下的所有文件(包括其他dll、已经生成的.nupkg、.nuspec文件)全部递归打包进当前包,所有包体积都等于当前目录的总大小,所以大小完全一致。 - 遍历脚本使用
*.*匹配所有文件而非仅匹配.dll,会把非dll文件也纳入处理流程,进一步冗余打包无关内容。 - 默认
.nuspec中保留了示例依赖、无效的项目/图标地址等无用配置,也会增加不必要的包体积。
修正思路:
- 打包前先清理目录下历史生成的
.nuspec、.nupkg文件,避免冗余打包 - 在
.nuspec中明确添加<files>节点,仅指定需要打包的dll文件路径 - 遍历逻辑仅匹配
.dll后缀的文件
2. nuspec指定targetFramework为net45的方法
需要同时修改依赖组配置和dll存放路径规则,符合Nuget的框架匹配约定:
- 把
<dependencies>下的group节点targetFramework属性值改为net45,如果该dll无第三方依赖,可直接删除整个<dependencies>节点 - 在
<metadata>节点外新增<files>节点,指定将dll打包到lib\net45\目录下,Nuget会自动识别该路径对应的目标框架为net45
完整的nuspec示例
<?xml version="1.0" encoding="utf-8"?> <package > <metadata> <id>WPFToolkit</id> <version>1.0.0</version> <authors>auth</authors> <owners>auth</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <license type="expression">MIT</license> <description>DLL file to nuget package</description> <releaseNotes></releaseNotes> <copyright>Copyright 2021</copyright> <tags>net45</tags> <dependencies> <group targetFramework="net45"> </group> </dependencies> </metadata> <files> <file src="WPFToolkit.dll" target="lib\net45\WPFToolkit.dll" /> <!-- 如有pdb符号文件可新增以下行配合-Symbols参数使用 --> <!-- <file src="WPFToolkit.pdb" target="lib\net45\WPFToolkit.pdb" /> --> </files> </package>
修正后的批量打包脚本
:: 清理历史生成文件 del *.nupkg del *.nuspec :: 仅遍历dll文件 for %%f in (*.dll) do ( echo 处理文件:%%~nf.dll nuget spec "%%~nf.dll" :: 自动替换nuspec默认配置、添加files节点 powershell -Command "(Get-Content '%%~nf.dll.nuspec') -replace '<id>%%~nf.dll</id>', '<id>%%~nf</id>' -replace '<group targetFramework=\".NETStandard2.1\">[.\s\S]*?</group>', '<group targetFramework=\"net45\"></group>' -replace '</metadata>', '<files><file src=\"%%~nf.dll\" target=\"lib\net45\%%~nf.dll\"/></files></metadata>' | Out-File '%%~nf.dll.nuspec' -Encoding utf8" nuget pack "%%~nf.dll.nuspec" -p description="DLL file to nuget package" )
内容的提问来源于stack exchange,提问作者Ralentix
相关产品推荐
相关产品推荐

