Nuget pack И нажмите в пределах той же партии script

Мне нужно потратить время на создание пакета script для того, чтобы упаковать и нажимать полученный файл .nupkg до моего личного фида nuget. Я могу назвать pack просто отлично, но я не знаю, как разбирать имя nupkg из результирующего вывода, чтобы сделать push. К сожалению, номер версии автоматически увеличивается, поэтому я не могу просто сделать предположение о том, как будет назван результирующий файл.

FWIW, я использую myget.org для своего частного хостинга, но это можно легко применить к любому хосту (включая nuget.org).

Ответ 1

nuget push поддерживает подстановочные знаки, поэтому вы можете сделать что-то вроде этого:

REM delete existing nuget packages
del *.nupkg

nuget pack MyProject.csproj

nuget push *.nupkg

Ответ 2

это заняло больше времени, чем я хотел, но в итоге я упаковываю сборку в папку с именем bin\nuget_build, так как она находится в bin, она не будет проверена в исходном элементе управления. script каждый раз удаляет и создает bin\nuget_build, поэтому мы можем перебирать содержимое каталога и nuget push каждого файла до вашего узла nuget. Таким образом, вам не нужно беспокоиться о разборе вывода из команды pack и всегда иметь правильный номер версии).

Убедитесь, что вы изменили:

  • имя проекта (найдите "Some.Project.Web.csproj" )
  • ваш хост опубликует ключ api (найдите 55555555-5555-5555-5555-555555555555)
  • и источник подачи, на который вы нажимаете (find https://www.myget.org/F/some_company_feed/api/v2/package)

Вот script, который я проверяю в исходном контроле и вызове с моей машины сборки.

REM This file is used to package projects and publish them to MyGet
REM This file should sit in the same directory as the csproj file you want to package 
REM nuget.exe should be in a directory called ".nuget" one directory up
REM You can get nuget.exe to install by turning on nuget package restore

set config=%1
set PackageVersion=%2
if "%config%" == "" (
   set config=Debug
)

set version=
if not "%PackageVersion%" == "" (
   set version=-Version %PackageVersion%
)

set nuget=..\.nuget\nuget.exe

REM Make sure there is only one file in the package directory because we're going to push everything to myget
del /F /Q bin\nuget_build 
mkdir bin\nuget_build

REM ** Pack the Project **
REM Changing package title/id/description can be done by modifying [AssemblyTitle] and [AssemblyDescription]
REM in the AssemblyInfo.cs file in the project (see: http://stackoverflow.com/info/22208542/nuget-pack-someproject-csproj-wont-let-me-change-title-or-description/22208543#22208543)

cmd /c %nuget% pack "Company.Project.Web.csproj" -IncludeReferencedProjects -o bin\nuget_build -p Configuration=%config% %version% 

REM ** Push the file to myget ** 
REM There should only be a single file in the 
for /f %%l in ('dir /b /s bin\nuget_build\*.nupkg') do (
    cmd /c %nuget% push %%l 55555555-5555-5555-5555-555555555555 -Source https://www.myget.org/F/some_company_feed/api/v2/package 
)