.nuspec 是 nuget 包的 xml 元数据文件,定义包标识、依赖、内容等;必须含 根元素和 ,含必填 、、、,通过 指定打包路径, 声明依赖,支持多框架分组及高级字段如 、 等。

.nuspec 是 NuGet 包的元数据定义文件,本质是一个 XML 文件,用于描述包的标识、依赖、内容、作者等信息。它不参与编译,但决定打包时包含哪些文件、引用哪些依赖、显示什么描述——是 NuGet 打包(nuget pack 或 dotnet pack)的核心配置依据。
基础结构:必须有的根元素和关键字段
一个最小可用的 .nuspec 文件需满足以下要求:
-
<package></package>是最外层根元素 -
<metadata></metadata>包含所有包级元数据(必填) -
<id></id>包唯一标识符(如MyCompany.Utilities),不能含空格或特殊字符 -
<version></version>语义化版本号(如1.0.0或2.1.3-beta) -
<title></title>(可选但推荐)用户在 NuGet.org 或 Visual Studio 中看到的显示名 -
<description></description>(必填)简明说明包用途,会出现在包管理器界面 -
<authors></authors>作者列表,用英文逗号分隔(如John Doe, Jane Smith)
指定程序集与资源:files 节点控制打包内容
<files></files> 决定哪些文件被打进 .nupkg,按目标路径组织。常用写法:
- 打包编译输出:
<file src="bin%5CRelease%5C*.dll" target="lib\net6.0"></file>(注意路径分隔符用反斜杠,target指定框架目录) - 打包 PDB 调试符号:
<file src="bin%5CRelease%5C*.pdb" target="lib\net6.0"></file> - 打包 XML 文档:
<file src="bin%5CRelease%5C*.xml" target="lib\net6.0"></file> - 打包工具类脚本(如 PowerShell):
<file src="tools%5C**%5C*.*" target="tools"></file> - 排除不需要的文件:不写入
<files></files>即不打包;也可用<file></file>的exclude属性(较少用)
声明依赖与兼容性:dependencies 和 frameworkAssemblies
让 NuGet 知道这个包运行时需要哪些其他包或 .NET Framework 组件:
-
<dependencies></dependencies>下用<dependency></dependency>声明 NuGet 包依赖:<dependency id="Newtonsoft.Json" version="[13.0.3]"></dependency>(支持范围语法,如[13.0.3]、13.0.3、[13.0,14.0)) - 若需依赖特定框架内置程序集(如
System.Data),用<frameworkassemblies></frameworkassemblies>:<frameworkassembly assemblyname="System.Data" targetframework="net472"></frameworkassembly> - 多目标框架?可在
<dependencies></dependencies>内按targetFramework分组:<group targetframework="net6.0"><dependency id="Microsoft.Extensions.DependencyInjection" version="6.0.0"></dependency></group>
高级配置:标签、许可证、仓库链接等(提升发布体验)
这些字段虽非必需,但在 nuget.org 上发布时显著提升专业性和可发现性:
-
<projecturl></projecturl>指向 GitHub/GitLab 项目主页 -
<license type="expression">MIT</license>或<license type="file">LICENSE.txt</license> <repository type="git" url="https://github.com/xxx/yyy" branch="main"></repository>-
<tags></tags>用空格分隔关键词(如logging json serialization),影响搜索排名 -
<icon></icon>推荐使用 64×64 PNG 图标(路径相对.nuspec文件)
不复杂但容易忽略:确保 .nuspec 文件编码为 UTF-8(无 BOM),且所有路径使用 Windows 风格反斜杠(即使在 Linux/macOS 上构建),否则 nuget pack 可能静默失败或路径错乱。










