Scripting 使用.NetCore RC2自动化Nuget包推送
我目前正在开发一个.NET核心库,我将在另一个项目中将其用作NuGet包 我已经能够在项目目录中使用“dotnetpack”命令成功地打包项目,并将该包上载到MyGet 我更愿意通过使用“nugetpush”命令来自动化推送NuGet包的过程 我的问题是project.json文件中定义的“scripts”属性似乎没有在pack或build上执行。我期望这些脚本会在相应的事件发生时执行,但它们似乎没有任何效果,因为在构建时,无论是否使用verbose标记,我都看不到控制台的任何输出 我知道MyGet能够基于Git存储库更新包提要,但我想了解当前使用project.json执行脚本是否存在问题。理想情况下,我希望在pack成功执行后使用nuget push命令 这是我的project.json文件:Scripting 使用.NetCore RC2自动化Nuget包推送,scripting,nuget,asp.net-core,portable-class-library,project.json,Scripting,Nuget,Asp.net Core,Portable Class Library,Project.json,我目前正在开发一个.NET核心库,我将在另一个项目中将其用作NuGet包 我已经能够在项目目录中使用“dotnetpack”命令成功地打包项目,并将该包上载到MyGet 我更愿意通过使用“nugetpush”命令来自动化推送NuGet包的过程 我的问题是project.json文件中定义的“scripts”属性似乎没有在pack或build上执行。我期望这些脚本会在相应的事件发生时执行,但它们似乎没有任何效果,因为在构建时,无论是否使用verbose标记,我都看不到控制台的任何输出 我知道MyG
{
"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用预编译和后编译替换了预编译和后编译 您可以使用postcompile自动生成nupkg,并使用
"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%指定当前生成配置
当前构建配置的答案来自
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>
如何使用此功能并绕过多个框架?如果有多个框架,则编译后文件将在每个框架编译后运行,因此第一个框架将运行packs(所有框架,但只有第一个框架已重新编译)和push,第二个框架将运行packs(所有框架)但是现在不会推送了,因为这个版本包已经存在了……我已经有了一些针对net461和netstandard1.5框架的库,它正在推送这个包。唯一需要注意的是,我正在推送到一个本地共享文件夹,而不是nuget,因此我确定如果我推送到nuget会发生什么。在运行nuget推送之前,您需要使用一个脚本文件并测试正确的框架。您正在查找的上下文变量是%compile:TargetFramework%或%compile:FullTargetFramework%我在此处获得了上下文变量的完整列表:获取此错误:系统找不到指定的文件C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets,如果我双击它,它会打开文件并转到以下行:有什么建议吗?如果有人需要为当前配置创建包而不发布到提要,请使用:“DotNet pack--no build--configuration%compile:configuration%”