Kamil Stadryniak
Kamil Stadryniak

Reputation: 632

Managing Nuget packages for C# project present in multiple solutions

I am now on the phase of refactoring madness of a big project which has a lot of legacy and unstable modules. I've decided to split the solution that currently has ALL projects (so around 20 and there will be more because of unit test projects that would surely come in next months) chained in it to make it more independent and granular.

With this approach there are modules e.g. API clients that needs to be either referenced or added in multiple solutions.

The problem is that Nuget packages are getting restored only on the solution that it was added originally for the first time. So the simplest example:

Solution A:

------ ProjectA

------ APIClient

Solution B:

------ ProjectB

------ APIClient

Since we are not including packages folder it causes problems with Nuget packages:

  1. Clone the repo.

  2. Open Solution B, build it and restore the Nugets for solution.

  3. Errors with packages of ClientAPI in Solution B.

  4. Go to Solution A build it and restore the Nugets for solution

  5. Get back to Solution B.

  6. Nugets are restored for ClientAPI in Solution B and errors are gone.

Is there a way to somehow:

My config:

Upvotes: 3

Views: 2620

Answers (2)

Leo Liu
Leo Liu

Reputation: 76670

Managing Nuget packages for C# project present in multiple solutions

Thanks for you reply. I have reproduced this issue with two solutions, SolutionA with Project APIClient. And SolutionB, add the existing project APIClient in the SolutionA to the SolutionB.

Then if we restore the nuget package on the SolutionB, package in the project APIClient in the SolutionB will be restored in the \packages folder in the SolutionB folder by default rather than in the SolutionA folder.

In this case, the project APIClient still missing the .dll reference in the SolutionB, you still have to go to SolutionA and restore the nuget packages. That the reason why you got that issue.

To resolve this issue, you could add a NuGet.Config file next to the SolutionA and SolutionB with the following content:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Packages" />
  </config>
</configuration>

So, the \packages folder not related to the solution file.

Besides, if you are interested, you can try to convert the packages.config to the packagereference for the project APIClient, with this setting, the nuget package will be saved in the global packages folder, C:\Users\<UserName>\.nuget\packages.

Hope this helps.

Upvotes: 3

Batbaille
Batbaille

Reputation: 61

Why do you not add package in the solution B ?

What package mode do you use ?


If you use "Package reference" mode, you must add package information in csproj of solution B.

If you use "Package config" mode, you must add package information in package.config file of solution B.

Upvotes: 0

Related Questions