.nuspec 是 NuGet 包的 XML 元数据文件,定义包标识、依赖、内容等;必须含 <package> 根元素和 <metadata>,含必填 <id>、<version>、<description>、<authors>,通过 <files> 指定打包路径,<dependencies> 声明依赖,支持多框架分组及高级字段如 <license>、<repository> 等。

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

















