尝试以下操作:
1) 重命名 .nuspec 以匹配 .csproj 名称:
如果您的项目是: MyLib.csproj
将 MyLib.nuspec 重命名为MyLib.csproj.nuspec
2) 修改您的 .nuspec 文件,如下所示:
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<version>$version$</version>
<authors>$author$</authors>
<id>$id$</id>
<title>$id$</title>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<summary>$description$</summary>
</metadata>
</package>
在这里,工作由 Nuget 的“$version$”令牌(和其他)完成
查看这篇Nuget 文章以获取更多令牌和信息。
3)在您放置 .csproj.nuspec 文件的每个项目中使用以下构建后事件(请删除 Enter 键):
mkdir "$(SolutionDir)GeneratedPackages"
"$(SolutionDir).nuget\nuget.exe" pack "$(ProjectPath)"
-OutputDirectory "$(SolutionDir)GeneratedPackages"
-basepath "$(SolutionDir)$(ProjectName)\$(OutDir)"
如果我们有一个解决方案 C:\MySolution\MyLib.sln 和 c:\MySolution\MyLib\MyLib.csproj 的项目,我们的 .nuspec 文件应该是 c:\MySolution\MyLib\MyLib.csproj.nuspec 和 Post Build事件命令看起来像:
mkdir "C:\MySolution\GeneratedPackages"
"C:\MySolution\.nuget\nuget.exe" pack "C:\MySolution\MyLib\MyLib.csproj"
-OutputDirectory "C:\MySolution\GeneratedPackages"
-basepath "C:\MySolution\MyLib\bin\debug\"
修复 nuget.exe 的路径。在我的情况下,我使用的是 Nuget“自动重新生成构建时缺少的依赖项”,并且我在 .nuget 文件夹下的解决方案中有一个本地副本。
请注意,我们不是用 .nuspec 文件调用 nuget,而是直接用 .csproj 调用它!
此策略还将包括 Nuget 在安装包时创建的 packages.xml 中声明的所有项目依赖项。(自动,每次构建时)
你完成了!现在更改程序集和文件版本
项目 > 属性 > 装配信息
重要提示:如果您设置了 $author$ 和/或 $description$ 令牌,请在此处填写大会的公司和说明字段。如果遇到问题,请删除 $author$ 和/或 $description$ 标记并尝试再次编译。
并构建您的项目,您将在 /GeneratedPackages 文件夹中看到带有您在项目属性中设置的版本的 MyLib.XXXXnupack。如果您设置依赖项,您会看到它已自动包含为包依赖项。
我们正在将此策略与 Jenkins CI 服务器一起使用,以自动构建解决方案并将包从 GeneratedPackages 复制到我们的自定义 NugetServer。
您还可以使用
nuget push
将生成的包发送到 Nuget 服务器
发布中的问题:
如评论中所述,存在不允许 Nuget.exe 在 RELEASE 模式下生成包的问题。
这样做是为了修复它:
对于使用此脚本的每个项目:
- 项目属性 > 构建
- 在“配置”下拉菜单中选择“所有配置”
- 在“输出”部分,更改“输出路径:”字段,例如我目前使用的是“bin\”(不带cuotes)