我目前正在开发一个.NET Core库,我将在另一个项目中用作NuGet包。
我已经能够使用项目目录中的“dotnet pack”命令成功打包项目,并将该程序包上传到MyGet。
我更喜欢使用“nuget push”命令自动执行推送NuGet包的过程。
我的问题是project.json文件中定义的“scripts”属性似乎不在pack或build上执行。我预计这些脚本会在相应的事件发生时执行,但它们似乎没有任何效果,因为我在构建时没有看到任何输出到控制台,无论是否有详细的标记。
我知道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": [ ]
}
}
}
}
答案 0 :(得分:7)
RC2用precompile和postcompile替换了prebuild和postbuild。
您可以使用postcompile自动生成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包。然后它会将nuget包推送到指定的nuget服务器。
不幸的是没有变量来指定构建配置,因此在上面的路径中,当您在调试和发布配置之间切换时,您必须手动更改它。
以上使用%compile:Configuration%来指定当前的构建配置。
当前构建配置的答案来自 How to run scripts based on solution configuration in ASP.NET Core RC2
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>