2017-06-24 5 views
3

J'automatise mes projets .NET Standard (le nouveau format csproj de VS 2017) pour générer des paquets de nugets après la construction. Le fait est que je veux que tous les projets de la solution suivent la version de ma build AppVeyor, pas la version qui est définie dans les propriétés Package de csprojs (par défaut 1.0.0).Comment utiliser Pack dotnet avec AppVeyor?

Une autre chose à prendre en compte est que mes projets ont des références entre eux et devraient également conserver la version de construction d'AppVeyor.

Existe-t-il un moyen facile de le faire? Comment?

Répondre

2

MISE À JOUR:.NET Core .csproj files patching et automatic nuget packaging for .NET Core projects fonctionne maintenant.


Il y a peu d'options:

Effectuer le patch manuellement le fichier .NET standard .csproj avec PowerShell. Dans cet exemple, nous mettons à jour la version, mais vous pouvez également mettre à jour d'autres paramètres de cette façon.

$xmlPath = "$env:appveyor_build_folder\MyProject\MyProject.csproj" 
$xml = [xml](get-content $xmlPath) 
$propertyGroup = $xml.Project.PropertyGroup | Where { $_.Version} 
$propertyGroup.Version = $env:appveyor_build_version 
$xml.Save($xmlPath) 
msbuild %appveyor_build_folder%\MyProject\MyProject.csproj /t:pack 

ou si vous souhaitez continuer à utiliser le fichier .nuspec, vous pouvez emballer avec la commande comme ceci:

msbuild %appveyor_build_folder%\MyProject\MyProject.csproj /t:pack /p:Configuration=%CONFIGURATION%;NuspecFile=MyProject\MyProject.nuspec;PackageVersion=%APPVEYOR_BUILD_VERSION% 

Bien sûr, vous pouvez utiliser dotnet pack mais nous pensons que l'avenir msbuild restera outil principal, donc nous essayons de faire tous les scripts en l'utilisant. Inutile de dire que nous, dans AppVeyor, devons rendre ce script inutile, nous le suivons dans https://github.com/appveyor/ci/issues/1404.

+0

Je ne pense pas que csproj devrait avoir un attribut 'Version'. Selon [this] (https://docs.microsoft.com/en-us/nuget/guides/create-net-standard-packages-vs2017), il devrait s'agir de 'PackageVersion'. –

+0

Selon [this] (https://docs.microsoft.com/en-us/dotnet/core/tools/csproj), pour 'PackageVersion', * default est la valeur de $ (Version), c'est-à-dire de la version de la propriété dans le projet *. Donc, si je comprends bien, 'Version' est toujours valide, mais' PackageVersion' est plus spécifique à l'empaquetage de Nuget. ** Ajout **: Je pense que pour le patch automatique dans AppVeyor, nous devrions proposer des options pour patcher les deux et effectivement patcher ce qui existe vraiment dans '.csproj' – ilyaf

3

Vous pouvez passer la version comme une propriété MSBuild à dotnet pack:

dotnet pack MyProject.csproj --configuration Release /p:Version="1.2.3" 

(cela fonctionne pour dotnet build aussi)

Voici un exemple dans le FakeItEasy build script.

Pour obtenir le numéro de build AppVeyor, utilisez le APPVEYOR_BUILD_VERSIONenvironment variable.

Une autre chose à prendre en compte est que mes projets ont des références entre eux et devraient également conserver la version de construction d'AppVeyor.

Cela ne devrait pas poser de problème, car vous ne spécifiez pas de version dans l'élément <ProjectReference>.