How to update a Nuget Package Reference from TFS Build? - tfs

I'm calling the "Nuget Restore Task" and "Nuget Update Task" before I build Solution B in a TFS CI Build definition. Solution B references the Nuget Package created from Solution A which I built prior to Solution B.
I also have a retention policy for my CI Nuget packages so only the last 5 packages are kept.
The point of this is for Solution B to also build using the latest CI Nuget package for Solution A.
If the Nuget package for Solution A which is referenced by Solution B exists this all works. If the Nuget package for Solution A has been removed from the store the "Nuget Restore Task" fails. This means that the "Nuget Update Task" does not get a chance to execute which would update the Solution A reference to the latest Nuget package.
Does anyone have any suggestions for making this work? Or perhaps an alternative approach?

Related

No Dependencies are automatically installed when adding nuget package

I'm creating a small nuget package for internal using (I created .NET standard project to use both .NET Framework or .NET Core). I created a Build Definition to build the library then push it to the Nuget Feeds of my company.
I have 2 questions:
How can I set it automatically increase the version of the my nuget package when Queue the build in tfs 2017 & Can I set some information like Author, Company...for my package?
After having the Package in the TFS Packages. I tried to add my nuget package to my project. The nuget referenced package were not automatically added to the project. I can see, it displayed "No dependencies" but in fact, I used 2 packages in my library are Newtonsoft & StackExchange.Redis. So when I run the debug, error shown "Could not find the StackExchange.Redis..."
That's strange
In my Libary project setting, I can see
There are two ways to package nuget packages. You can use "nuget pack" or "dotnet pack" (if you have some dotnet core in your solution). The difference is that dotnet pack will create a dependency section in your nuspec and you would see dependency upon installing where nuget pack will not by default unless you use an actual nuspec file. If you do create a nuspec file, you'll need to add the dependency section to you file in order to have them pop up at installation. Check here for info on the nuspec file.
For you version number it's also actually in the nuspec file in the metadata section there is a tag with the version you want. The TFS nuget pack task as a drop down you can use to send in a version number. For this task you can either use a nuspec file or the csproj directly.
You have the same options for dotnet pack using the dotnet core task
Update:
If you change your build number version pattern in the options tab for a 4 (or 3) digit pattern like $(Date:yyyy.MM.dd).$(Rev:r) e.g. 2020.03.05.xx (where xx will increment for each build in the same day and go down to 1 the next day) or 1.0.$(Rev:r) which will be 1.0.xx that will increment forever until you change the 1.0 value and then use the "Use Build Number" it will do it for you.

How to configure older version of package with packages available on TFS server

I have a VS 2008 file that runs on my computer perfectly fine and does everything it needs to do. When I update the TFS version of it its copies exactly, just as you'd expect. However when I build my solution on TFS it can't find a package in my packages folder in my project folder.
This all makes sense, the .gitignore has it set so that packages in the project are removed (unless necessary), and my company uses nuget to deal with all common 3rd party packages used. That being said, how do I get a reference to the package (with appropriate version) from the TFS server to my code on TFS?
P.S. This is my first time dealing with this tech so apologies if the lingo is being misused. Thanks!
How to configure older version of package with packages available on TFS server
If you are using the TFS version is 2015 or above, there is NuGet Installer or NuGet Restore task, which you could use to restore the nuget package from the package source to the work directory when you build your project:
Check the document Azure Artifacts and NuGet restore Vs NuGet installer.
If you are using the TFS version is 2013 and below, you can
check the document Integrate NuGet Package Restore TFS Build 2013 or Older to restore nuget packages.
Hope this helps.

Nuget Restore in MS Build Step

In my asp.net web application, i have solution with 5 projects and nuget.org. In TFS Build Definition,
1) While building the whole solution in Visual Studio Build Task
Nuget packages getting restored.
2) While trying to generate executable files for individual projects in MS Build Task
If I select Restore Nuget packages, It's not finding nuget packages and step getting failed with message - "Process 'NuGet.exe' exited with code '1'."
I have tried many references online and none worked. Any suggestions on how to solve this?
Do i need to make any changes in the nuget.config file to support restoring
packages to individual projects.
Do not directly select Restore Nuget pacakges in MS build task configuration. This option is deprecated. To restore NuGet packages, add a NuGet Installer step before the build.
(Important) This option is deprecated. Make sure to clear this
checkbox and instead use the NuGet Installer build step.
Source Link: MSBuild
Besides, you could also build single project not the entire solution in Visual Studio Build task. Just select the project (.*proj) files instead of .sln file.
Unless you are building a customized MSBuild project file, then we recommend you use the MSBuild step instead of the Visual Studio Build step.
You could also try to build single project using Visual Studio Build task, see if the issue is still exists.
Same problem, downgraded to 4.4.1. it helped

What's the difference using NuGet Installer task and "Restore Nuget Packages" in Visual Studio Build step?

For TFS build (I use TFS 2017) should I use NuGet Installer task or use the Visual Studio Build step in the build configuration to restore all NuGet packages.
Which is the preferred way to use it?
At first, I was confused because I thought the NuGet Restore task before the build was where the error was coming from. The answer from Patrick-MSFT helped me find the correct answer but I am adding more information and context.
As you can see, the checkbox for the NuGet Restore is under the Build task, just like #Patrick-MSFT showed. What confused me, however, was before my Build task I had a NuGet Installer task with name NuGet restore. The unchecking the checkbox should remove the error.
You'd better still use the NuGet Installer task during your build pipeline for now.
This option is deprecated. To restore NuGet packages, add a NuGet
Installer step before the build.
You could also find related prompting message in Visual Studio Build task tutorial.
Restore NuGet Packages
(Important) This option is deprecated. Make sure to clear this checkbox and instead use the NuGet Installer build step.
The nuget team changed the way that nuget restores packages. You used to have to enable restore against your sln, which modded your csproj's; this is what the deprecated "restore nuget packages" does. Now, you use the nuget task/step before building the sln.
See: http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html

Packaging nuget package on VSTS 'Newtonsoft.Json' already has a dependency defined for 'NETStandard.Library'

Packaging a build use Nuget Packager in VSTS and i get the error:
[error]'Newtonsoft.Json' already has a dependency defined for 'NETStandard.Library'.
Most of the hints that solves this involves updating nuget, but since I am building on Team Services I can't really do this.
It seems that the nuget used by nuget packager is not the latest. After testing locally with latest nuget.exe everything worked so I added a new powershell release step. This solution is appropriate for VSTS, for TFS where you have access to the server I recommend upgrading nuget.exe on the server itself:
This script downloads nuget.exe into the artifacts directory (and outputs the path to the nuget.exe so you can see where it is put.).
I then altered the Nuget Packager build step to use the freshly downloaded nuget.exe.
Had the same issue today.
Using your own build agent
If you are using your own build agents (rather than the hosted agent) you can manually update the version of NuGet to the latest version. In my case, this has resolved my problems.
e.g. C:\agent\externals\nuget\nuget.exe
Using the hosted agent
It's a bit messy but you could just upload the latest nuget.exe into the repo and set the NuGet Packager to use this.
To anyone getting this in 2018, Microsoft have created a new version of the NuGet task that fixes this issue. No need for powershell install steps.
Change the NuGet task version in your build step version to 2.*
This caused some breaking changes for me, that I resolved with the following advanced settings
Nuget Restore
Nuget Pack
Nuget push

Resources