1

В настоящее время я работаю над библиотекой .NET Core, которую я собираюсь использовать в качестве пакета NuGet в другом проекте.Автоматический пакет Nuget Push With .NetCore RC2

Я смог успешно упаковать проект, используя команду «dotnet pack» в каталоге проекта и загрузить этот пакет в MyGet.

Я бы предпочел автоматизировать этот процесс нажатия на пакет NuGet с помощью команды «nuget push».

Моя проблема заключается в том, что свойство «scripts», определенное в файле project.json, похоже, не выполняется в пакете или сборке. Я ожидал, что эти скрипты будут выполняться, когда произойдет соответствующее событие, но они, похоже, не имеют никакого эффекта, поскольку я не вижу ничего вывода на консоль при создании, с или без его подробного тега.

Я понимаю, что MyGet может обновлять корм для пакетов на основе репозитория Git, но я хотел бы понять, есть ли проблема с выполнением скрипта, использующего в настоящее время project.json. В идеале я хочу использовать команду 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": [ ] 
     } 

    } 
    } 

} 

ответ

5

RC2 заменен prebuild и postbuild с прекомпиляции и postcompile.

Вы можете использовать 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" 
] 
    } 

Это будет автоматически вызывать Dotnet пакет, используя файл project.json, который существует в директории проекта , Затем он подталкивает пакет nuget к указанному серверу nuget.

К сожалению, нет никакой переменной для спецификации конфигурации сборки, поэтому в указанном выше пути вам придется вручную ее изменить при переключении между конфигурацией отладки и выпуска.

В приведенном выше примере используется% compile: Configuration%, чтобы указать текущую конфигурацию сборки.

Ответ на текущей конфигурации сборки происходит от How to run scripts based on solution configuration in ASP.NET Core RC2

Visual Studio 2017

В Visual Studio 2017 вы можете использовать DotNet NuGet нажать команду путем редактирования файла csproj и с помощью следующей команды

<Target Name="PushPackage" AfterTargets="Pack"> 
    <Exec Command="dotnet nuget push &quot;$(MSBuildProjectDirectory)\bin\$(Configuration)\$(AssemblyName).$(Version).nupkg&quot; -s nugetserver -k apikey" /> 
</Target> 
+0

Как вы можете использовать это и обходить множество фреймворков? Если у вас несколько фреймворков, посткомпиляция запускается после компиляции каждой структуры, поэтому первая выполняется, пакеты (все фреймворки, но только первая структура была перекомпилирована) и толкает, вторая запускает пакеты (все фреймворки), но теперь не будет push, потому что этот пакет версии уже существует ... – Adam

+0

У меня есть несколько библиотек, предназначенных для сетей net461 и netstandard1.5, и это толкает пакет. Единственное предостережение в том, что я нажимаю на локальную общую папку, а не на nuget, поэтому я должен знать, что произойдет, если я буду настаивать на nuget. – DazFahy

+0

Вы должны будете использовать файл сценария и протестировать правильную структуру перед запуском nuget push.Переменная контекста, которую вы ищете, составляет% compile: TargetFramework% или% compile: FullTargetFramework% У меня есть полный список переменных контекста здесь: http://stackoverflow.com/a/38339463/1112558 – Erikest

Смежные вопросы