使用 .NetCore RC2 自动化 Nuget 包推送
Automating Nuget Package Push With .NetCore RC2
我目前正在开发一个 .NET Core 库,我将在另一个项目中将其用作 NuGet 包。
我已经能够在项目目录中使用 "dotnet pack" 命令成功打包项目,并将该包上传到 MyGet。
我更愿意使用 "nuget push" 命令自动执行推送 NuGet 程序包的过程。
我的问题是 project.json 文件中定义的 "scripts" 属性 似乎没有在打包或构建时执行。我预计这些脚本会在相应事件发生时执行,但它们似乎没有任何效果,因为我在构建时没有看到任何输出到控制台,无论是否有详细标记。
我知道 MyGet 能够更新基于 Git 存储库的包提要,但我想了解当前使用 project.json 执行脚本是否存在问题。理想情况下,我想在 pack 成功执行后使用 nuget push 命令。
这是我的 project.json 文件:
{
"version": "0.0.1",
"scripts": {
"postbuild": [ "echo build" ],
"prebuild": "echo build",
"postpack": "echo build",
"postpublish": "echo build",
"postrestore": "echo build",
"prepack": "echo build",
"prepare": "echo build",
"prepublish": "echo build",
"prerestore": "echo build"
},
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"frameworks": {
"netstandard1.5": {
}
},
"buildOptions": {
"allowUnsafe": false,
"debugType": "portable",
"emitEntryPoint": false,
"xmlDoc": false
},
"commands": { },
"packOptions": {
"files": {
"include": "%project:Directory%/bin/release/*.nupkg"
}
},
"configurations": {
"Debug": {
"buildOptions": {
"define": [ "DEBUG", "TRACE" ]
}
},
"Release": {
"buildOptions": {
"define": [ ]
}
}
}
}
RC2 用预编译和后编译替换了预构建和后构建。
您可以使用后编译自动生成 nupkg 并使用
将包推送到 nuget 服务器
"scripts": {
"postcompile": [
"dotnet pack --no-build",
"\"%project:Directory%\..\..\nuget.exe\" push \"%project:Directory%\bin\%compile:Configuration%\%project:Name%.%project:Version%.nupkg\" -source nugetserver -ApiKey key"
]
}
这将使用项目目录中存在的 project.json 文件自动调用 dotnet pack。然后它将nuget包推送到指定的nuget服务器。
不幸的是,没有变量来指定构建配置,因此在上述路径中,当您在调试和发布配置之间切换时,您必须手动更改它。
上面使用 %compile:Configuration% 来指定当前构建配置。
当前构建配置的答案来自
Visual Studio 2017
在 Visual Studio 2017 中,您可以通过编辑 csproj 文件并使用以下命令来使用 dotnet nuget push 命令
<Target Name="PushPackage" AfterTargets="Pack">
<Exec Command="dotnet nuget push "$(MSBuildProjectDirectory)\bin$(Configuration)$(AssemblyName).$(Version).nupkg" -s nugetserver -k apikey" />
</Target>
我目前正在开发一个 .NET Core 库,我将在另一个项目中将其用作 NuGet 包。
我已经能够在项目目录中使用 "dotnet pack" 命令成功打包项目,并将该包上传到 MyGet。
我更愿意使用 "nuget push" 命令自动执行推送 NuGet 程序包的过程。
我的问题是 project.json 文件中定义的 "scripts" 属性 似乎没有在打包或构建时执行。我预计这些脚本会在相应事件发生时执行,但它们似乎没有任何效果,因为我在构建时没有看到任何输出到控制台,无论是否有详细标记。
我知道 MyGet 能够更新基于 Git 存储库的包提要,但我想了解当前使用 project.json 执行脚本是否存在问题。理想情况下,我想在 pack 成功执行后使用 nuget push 命令。
这是我的 project.json 文件:
{
"version": "0.0.1",
"scripts": {
"postbuild": [ "echo build" ],
"prebuild": "echo build",
"postpack": "echo build",
"postpublish": "echo build",
"postrestore": "echo build",
"prepack": "echo build",
"prepare": "echo build",
"prepublish": "echo build",
"prerestore": "echo build"
},
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"frameworks": {
"netstandard1.5": {
}
},
"buildOptions": {
"allowUnsafe": false,
"debugType": "portable",
"emitEntryPoint": false,
"xmlDoc": false
},
"commands": { },
"packOptions": {
"files": {
"include": "%project:Directory%/bin/release/*.nupkg"
}
},
"configurations": {
"Debug": {
"buildOptions": {
"define": [ "DEBUG", "TRACE" ]
}
},
"Release": {
"buildOptions": {
"define": [ ]
}
}
}
}
RC2 用预编译和后编译替换了预构建和后构建。
您可以使用后编译自动生成 nupkg 并使用
将包推送到 nuget 服务器"scripts": {
"postcompile": [
"dotnet pack --no-build",
"\"%project:Directory%\..\..\nuget.exe\" push \"%project:Directory%\bin\%compile:Configuration%\%project:Name%.%project:Version%.nupkg\" -source nugetserver -ApiKey key"
]
}
这将使用项目目录中存在的 project.json 文件自动调用 dotnet pack。然后它将nuget包推送到指定的nuget服务器。
不幸的是,没有变量来指定构建配置,因此在上述路径中,当您在调试和发布配置之间切换时,您必须手动更改它。
上面使用 %compile:Configuration% 来指定当前构建配置。
当前构建配置的答案来自
Visual Studio 2017
在 Visual Studio 2017 中,您可以通过编辑 csproj 文件并使用以下命令来使用 dotnet nuget push 命令
<Target Name="PushPackage" AfterTargets="Pack">
<Exec Command="dotnet nuget push "$(MSBuildProjectDirectory)\bin$(Configuration)$(AssemblyName).$(Version).nupkg" -s nugetserver -k apikey" />
</Target>