Reputation: 632
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:
Clone the repo.
Open Solution B, build it and restore the Nugets for solution.
Errors with packages of ClientAPI in Solution B.
Go to Solution A build it and restore the Nugets for solution
Get back to Solution B.
Nugets are restored for ClientAPI in Solution B and errors are gone.
Is there a way to somehow:
My config:
Upvotes: 3
Views: 2620
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
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