How to update nuget packages without package manager of visual studio? - visual-studio

How to update nuget packages without package manager of visual studio, if the projects referenced in solution have different nuget package folders, then updating nuget packages from solution becomes tedious job. You need to update nuget packages per project. Is there a way to update nuget packages without using visual studio?

To update the nuget packages in solution, you can create a batch file with multiple commands or can execute command like mentioned below using command prompt:
Open command prompt and change the folder where Nuget.Exe is present.
NuGet.Exe Update [Solution File] -Id [Nuget package Id]
There are more switches to Nuget.Exe Update switch, like you can specify the nuget source. Make changes as required and you can successfully update nuget packages without opening the visual studio.

Related

How reproduce VS2017 Package Manager command "Update-Package -reinstall" with Nuget CLI

I've tried with Nuget Update, Nuget restore, but they are actually not the same and here's why:
I've created a Nuget pkg only to distribute an executable file. When I install the Nuget the executable is added to my project so I can reference it and run it within my application.
Now, I don't want that every developer has to install the Nuget to have the executable in their project, but I just want the .exe to be added when the project is built. And of course, the reference to the package in the config file is present.
If I run Update-Package -Id -reinstall(using the Package Manager of VS) a folder with the .exe is added to the project root, but if I do nuget update or nuget restore (using the nuget CLI) it only re-add the .exe into the packages folder.
The reason why I need to run the nuget CLI is because I'm using TeamCity and I want to add the .exe when the automatic build runs.
I hope it makes sense.
How reproduce VS2017 Package Manager command “Update-Package -reinstall” with Nuget CLI
I am afraid you can NOT do such things with NuGet CLI. That because NuGet CLI does not modify a project file or packages.config. When we modify the project file, we need to do it by NuGet API in Visual Studio, but only package manager console can provide access to visual studio objects:
https://github.com/NuGet/Home/issues/1512
That is the reason why I said the easiest way is using the command line Update-Package -Id -reinstall in your previous thread. Then I also gave you another way to resolve this issue from the root cause, using .targets file to copy the executable file to the the project root, please check my update answer.
Of course, there is another simple idea to resolve this issue, just add a pre-build event in your project to copy the executable file to the the project root:
xcopy /Y "$(SolutionDir)packages\MyToolPackage.1.0.0\Tools\wkhtmltopdf.exe" "$(ProjectDir)"
Hope this helps.

How to resolve Nuget Package Version and Path in Pre-Build Event of a Project?

I have a NuGet Package containing content files that is referenced in my project. When getting latest on a new machine, the build fails because NuGet Restore doesn't copy content files. So what I want to do is this:
In PreBuild
If my Content file doesn't exist,
run this nuget Command: "Update-Package My.Nuget.Sources -reinstall"
I'm struggling with determining path differences due to versioning of the Nuget files and getting access to nuget. How do I actually generate the SourceOnlyNugetVersion and NugetPath variables below?
if not exist "$(ProjectFolder)App_Packages\My.NuGet.Sources.$(SourceOnlyNugetVersion?)\somefile.cs" (
"$(NugetPath)nuget.exe" Update-Package My.NuGet.Sources -reinstall
)
How to resolve Nuget Package Version and Path in Pre-Build Event of a Project?
If you want to reinstall package automatically in Pre-build event, I am afraid you can`t achieve it currently.
We could use the command Update-Package -Id <package_name> –reinstall to reinstall the packages to your project in the Package Manager Console, but it is impossible to automate that.
If you want to automate it in the build event, you have to call the NuGet CLI rather than Package Manager Console. Because NuGet CLI does not modify a project file or packages.config; in this way it's similar to restore in that it only adds packages to disk but does not change a project's dependencies. See NuGet CLI reference.
The operation Install packages on NuGet CLI:
Conversely, operation Install packages on Package Manager:
Installs a package and its dependencies into a project.
So we could not use NuGet CLI to reinstall NuGet packages for project.
Besides, we could not use the Package manager console powershell outside visual studio, because package manager console is providing is access to visual studio objects.
https://github.com/NuGet/Home/issues/1512
Similarly, we could not use Package manager console in the build event, build events are run by MSBuild so it needs to work when the build is run from the command line.
So it seems impossible to automate reinstall NuGet packages, or the alternative approach would be to write a console app that uses NuGet.Core.dll to do the same thing that the PowerShell script is doing.

Install multiple NuGet packages at once

Is it possible to use nuget to install multiple packages at once? That is, both download all nuget packages listed in packages.config and add the packages to the .csproj file.
What I do now is to use the NuGet Package Manager in Visual Studio and install each package one by one, but is there an easier way?
EDIT:
This question is not solved by How do I get NuGet to install/update all the packages in the packages.config? as it only downloads and installes the packages to the packages directory, and does not change the project files.
If I run
nuget install packages.config
It will install all packages in the packages.config file, but not update the project file.
Could you try to run this from the package manager console in Visual Studio:
Update-Package –reinstall
That should fix missing assembly references in your *.csproj files, if the packages are already in your packages.config.

Restore nuget packages defined in .nuget folder

There are some nuget packages (e.g. OpenCover or ReportGenerator) installed without changing packages.config in any of the project, but there is a [Solution Dir]\.nuget\packages.config created with the package reference information.
When VS builds the solution, the packages defined in that file are not downloaded at all (even I have auto restore nuget enabled).
How can I restore them automatically?
The MSBuild based package restore, that uses NuGet.targets, which is enabled in Visual Studio by selecting Enable NuGet Package Restore, does not seem to support restoring solution level packages, which are those that are defined in the [SolutionDir]\.nuget\packages.config file.
Looking at the NuGet.targets file on build it restores the packages for the project using the project's packages.config file but does not use the solution's packages.config file.
So your options are:
Stop using the MSBuild based package restore. Visual Studio, with recent versions of NuGet, will automatically restore all packages, including all solution level packages, when you build.
Run NuGet.exe restore YourSolution.sln from the command line, or PowerShell console, or as a pre-build step, to restore all packages. NuGet.exe can be used to restore all packages on a build server if you are using one.
The MSBuild based package restore has been deprecated by the NuGet team so I would use option 1) if this is possible.

Does "enable nuget package restore" realy necessary for package recovery?

I can successfully restore package even if the option "enable nuget package restore" is not switched on in the project. Plus it generates additional files within my solution.
With the latest version of NuGet (2.7 or above) you do not need to use the Enable NuGet Package Restore menu option if you do not want to.
The latest version of NuGet, when installed in Visual Studio, will automatically restore any missing packages when your build your project. It does this without needing to add any new files to your solution and does not use MSBuild. It is now the recommended way of restoring NuGet packages.
You can also restore from the command line using NuGet with a command line similar to:
nuget restore YourSolution.sln

Resources