请尝试以下操作:
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文件的项目中使用以下Post Build事件(请删除回车键):
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服务器
发行版问题:
如评论所述,有一个问题不允许Nuget.exe在发布模式下生成软件包。
为了解决此问题,请执行以下操作:
对于每个使用此脚本的项目:
- 项目属性>生成
- 在“配置”下拉列表中选择“所有配置”
- 在“输出”部分中更改“输出路径:”字段,例如,我当前使用的是“bin \”(不用引号)