.nuspec 是 NuGet 包的 XML 清单文件,定义元数据(如 id、version、authors)和依赖关系,不参与编译,仅用于打包;需正确声明命名空间,避免非法字符与配置冲突。

什么是 .nuspec 文件
.nuspec 是一个 XML 格式的清单文件,用于定义 NuGet 包的元数据和内容结构。它不参与编译,只在打包(nuget pack 或 dotnet pack)时被读取,告诉 NuGet “这个包叫什么、作者是谁、依赖哪些包、包含哪些文件”。它相当于 NuGet 包的“身份证+说明书”。
如何用 XML 定义基本元数据
核心元素必须放在 根节点下,最简可用结构包含 和可选的 。常见字段有:
-
:包唯一标识符,通常与项目名一致,不能含空格或特殊字符 -
:语义化版本号,如1.2.3或带预发布标签的2.0.0-beta1 -
:显示在 NuGet.org 上的名称(可选,不强制等于) -
:逗号分隔的作者名,如Alice,Bob -
:简短说明,会出现在包管理器 UI 中 -
、、:现代推荐填写的开源信息字段
MyLibrary 1.0.0 My Awesome Library DevTeam A small utility library for common tasks. https://github.com/example/mylibrary MIT
添加依赖和程序集引用
依赖关系写在 下,每个 指定目标框架(targetFramework 属性)和版本范围。注意:targetFramework 值必须是 NuGet 框架简称(如 net6.0、netstandard2.0),不是完整 TFM(如 net6.0-windows 可能被忽略)。
- 不指定
targetFramework→ 默认适用于所有框架 - 版本范围支持
[1.0.0,2.0.0)(含 1.0.0,不含 2.0.0)、1.0.0(精确匹配)、1.0.*(通配,仅限主版本) - 若项目使用 SDK 风格(
),通常无需手动维护,dotnet pack会自动包含输出程序集
常见错误和兼容性注意点
很多构建失败或包行为异常,根源在于 .nuspec 的细节偏差:
- XML 命名空间(
xmlns)缺失或拼错 →nuget pack报错 “The element 'package' in namespace … has invalid child element” -
含非法字符(如下划线开头、中文、点号过多)→ NuGet.org 拒绝上传,本地安装也可能失败 - 混合使用
和 SDK 打包 → 若指向未生成的 DLL 路径,打包会静默跳过该文件,但不报错 - 未声明
却在 GitHub 发布 → NuGet.org 无法自动关联源码链接,影响可信度 - 用
但未在中包含对应 LICENSE 文件 → 用户无法在本地查看许可证
如果只是为 .NET SDK 项目生成包,优先用 dotnet pack + .csproj 内置属性(如 、),而非单独维护 .nuspec —— 除非你需要精细控制文件映射或跨框架依赖分组。










