尝试以下方法:
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 article 了解更多令牌和信息。
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 和构建后事件命令如下所示:
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.X.X.X.X.nupack。如果你设置了依赖,你会看到它已经被自动包含为包依赖。
我们正在将此策略与 Jenkins CI 服务器一起使用,以自动构建解决方案并将包从 GeneratedPackages 复制到我们的自定义 NugetServer。
您也可以使用
来完成构建后事件
nuget push
将生成的包发送到 Nuget 服务器
发布中的问题:
如 cmets 中所述,存在不允许 Nuget.exe 在 RELEASE 模式下生成包的问题。
这样做是为了修复它:
对于使用此脚本的每个项目:
- 项目属性>构建
- 在“配置”下拉菜单中选择“所有配置”
- 在“Ouput”部分,更改“Output path:”字段,例如我目前使用的是“bin\”(不带cuotes)