dotnet restore not restoring nuget packages

dotnet restore not restoring nuget packages

I faced an interesting challenge while upgrading to the latest dotnet CLI. We've built an application a while ago in vNext beta4. During the course of the application we migrated up to beta8 and now it was time to upgrade to the latest .NET Framework and to use the latest CLI. Enough of background.

Once all the projects were migrated and running we started seeing some weird issues being raised in the build server (TeamCity) even though it was running fine locally. It took me a while to find out what the issue was.

Any time I ran the command dotnet build locally it would just work while running the same in the build server was failing. So I started digging a bit deeper and got to the dotnet restore command. Anytime I ran it locally it would come back with the message Nothing to do. None of the projects specified contain packages to restore. when obviously there was still something to be restored because the original error message was about some dependency not being loaded.

Why was the command running fine locally then? Since I'm running Visual Studio on my dev machine, it handles all the dependencies and downloads them for me, and when checking my csproj file I'd see the reference to the DLLs

<Reference Include="EntityFramework">
  <HintPath>..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath>
  <Private>True</Private>
</Reference>

So what I tried next was renaming my packages folder and trying to run dotnet restore and dotnet build again and voilà. I could replicate the exact same issue I was getting in my build server.

After a couple of hours and a lot more digging I landed on JetBrains' GitHub stating:

.NET CLI decided that dotnet restore should support restore only for new csproj files, so packages.config will be ignored by design

Where in my case I'm using the dotnet CLI with an old csproj with packages.config.

And as a workaround, I had to add a new step to my build process to run nuget restore and not rely on dotnet restore anymore at least for this project.

Hope it helps.

Cheers.