I'm currently working on a number of dotnet core applications and figuring out how to build and package them for placement into nuget repositories such as Nexus, Artifactory, VSTS Packages etc.
One thing that has been problematic has been creating an acceptable version number for the nuget package of a dotnet core class library project.
In short, the version number that you are able to
nuget pack (e.g. 1.0.0-100) isn't compatible with the nuget repository.
I initially attempted to tweak to the
nuget pack command by adding a
--version-suffix=$(Build.BuildId) as an argument.
Oddly, you can build the package but you can't store them - here is the build output from VSTS when pushing the build package into it's own VSTS Packages Repo:
'1.0.0-214' is not a valid version string. Parameter name: version Error: C:\a\_tasks\NuGetPublisher_333b11bd-d341-40d9-afcf-b32d5ce6f25b\0.2.30\node_modules\nuget-task-common\NuGet\3.3.0\NuGet.exe failed with return code: 1 Packages failed to publish
I think this has something to do with nuget not entirely supporting semver.
As this didn't work, I finally succeeded by adding a new powershell task right at the start of the build to modify the
project.json file appropriately.
$ProjectJsonPath=".\src\DevMachine.Models\project.json" cat $ProjectJsonPath (Get-Content $ProjectJsonPath).replace('1.0.0-*', '1.0.$(Build.BuildId)') | Set-Content $ProjectJsonPath cat $ProjectJsonPath
project.json file is correct, you can proceed to
nuget pack and finally store the resulting nuget package into your choice of nuget repository.
I admit the solution isn't pretty, but it works - and I'm sure the versioning of dotnet core class libraries will be sorted in due course.