用 dotnet pack 打包 SDK 风格类库需指定 –configuration Release,且 .csproj 中必须声明 PackageId 和 Version;发布前须用 nuget.exe push 配合有效 API Key,并本地验证包结构与引用兼容性。
用 dotnet pack 打包类库最直接
只要项目是 SDK 风格(.csproj 文件里有 Microsoft.NET.Sdk),不用额外装工具,直接命令行运行:
dotnet pack --configuration Release
就会在 bin/Release 下生成 .nupkg 文件。注意别漏掉 --configuration Release——Debug 模式打包可能含调试符号、版本号带 -dev 后缀,上传到 NuGet.org 会被拒。
常见错误:项目没设 和 ,打包后文件名是 Unnamed.1.0.0.nupkg。必须在 .csproj 里显式写:
MyAwesomeLib 1.0.0 YourName A short description
nuget.exe push 发布到 nuget.org
发布前先去 nuget.org 创建 API Key(只显示一次,务必复制保存)。然后执行:
nuget.exe push MyAwesomeLib.1.0.0.nupkg -Source https://api.nuget.org/v3/index.json -ApiKey YOUR_API_KEY_HERE
如果提示 nuget.exe 找不到,就去 下载最新版 并加到 PATH,或者用完整路径调用。
容易踩的坑:
- API Key 权限范围要选 “Push new packages”(不是 “All packages”)
- 包名已存在且你不是所有者?会报错
403 Forbidden - 版本号重复?报错
409 Conflict,得升版再推
用 Directory.Build.props 统一管理多项目元数据
如果你维护多个类库,每个都手写 PackageId、Description 容易不一致。可以在解决方案根目录建 Directory.Build.props,内容如下:
https://github.com/you/repo
https://github.com/you/repo
MIT
false
所有子项目的 .csproj 就能自动继承这些设置,不用每处重复写。
注意:IncludeSymbols 默认为 true 时会生成 .snupkg,但 nuget.org 要求它和 .nupkg 版本严格一致;若不打算提供源码调试支持,显式关掉更省事。