web-dev-qa-db-fra.com

Publier automatiquement un paquet NuGet construit avec VS2017

La nouveauté de Visual Studio 2017 est la possibilité de générer un package NuGet lors de la génération pour certains types de cibles (à savoir, .NET Standard 2.0, ce que j'utilise).

Cela fonctionne très bien et le fichier .nupkg est généré lors d’une construction réussie.

Cependant, je ne suis pas capable de comprendre comment obtenir le paquet construit automatiquement publié sur notre référentiel local.

J'ai déjà essayé un événement post-build de:

nuget Push -Source https://my.nuget.server/nuget/ "C:\Source\MyProject\bin\Release\MyProject.1.0.0.nupkg"

Mais cela pose 2 problèmes:

  1. Le nom du package inclut le numéro de version et il n'est pas disponible en tant que variable d'événement post-génération. Par conséquent, je ne peux pas dire, par exemple, nuget Push $(NugetPackage). Je ne parviens pas non plus à trouver une combinaison de macros/variables permettant d'obtenir efficacement le nom du package.
  2. Le processus d'empaquetage automatique de NuGet se produit après l'événement post-build , donc au moment de post-build, le paquet n'a même pas encore été généré!

Microsoft a fourni cet emballage NuGet automatique, mais il n’ya aucun moyen de le transférer dans un référentiel local (du moins semble-t-il)!

Quelqu'un at-il obtenu cela au travail? Est-ce que je manque quelque chose? Y at-il un travail autour? Est-ce que quelque chose est en train d'être travaillé?

6
qJake

Vous pouvez automatiser une publication sur un nuget en ajoutant la ligne ci-dessous à vos bibliothèques csproj directement. Vous devrez soit définir une variable d'environnement sur l'emplacement de votre nuget.exe, ajouter l'emplacement au chemin PATH de votre système ou bien le saisir dans le paramètre Command.

Personnellement, je préfère télécharger la dernière version de nuget.exe et la placer dans le dossier %userprofile%\.nuget de l'utilisateur. C'est ici que nuget stocke le cache local des paquets, il devrait donc déjà être créé.

Exemple de publication sur un référentiel distant.

<Target Name="PostPackNugetDeploy" AfterTargets="Pack" Condition="'$(Configuration)' == 'Release'">
  <Exec Command="="%userprofile%\.nuget\nuget.exe Push &quot;$(OutputPath)$(PackageId).$(PackageVersion).nupkg&quot; -Source &quot;$(NuGetSourceRelease)&quot; -Verbosity Detailed" />
</Target>

Exemple de publication dans un référentiel local.

<Target Name="PostPackNugetDeploy" AfterTargets="Pack" Condition="'$(Configuration)' == 'Release'">
 <Exec Command="%userprofile%\.nuget\nuget.exe add &quot;$(OutputPath)$(PackageId).$(PackageVersion).nupkg&quot; -source \\Server\Packages" />
</Target>

Vous pouvez trouver la documentation sur les cibles MSBuild pour nuget ici https://docs.Microsoft.com/en-us/nuget/reference/msbuild-targets

5
John C

Cette fonctionnalité a été demandée ici: Activer Push de VS .

La publication de NuGet est généralement gérée à l'aide d'un logiciel d'automatisation de la construction/déploiement tel que TFS, VSTS, Jenkins, etc.

2
desmondgc