Managing Nuget packages for C# project present in multiple solutions

杀马特。学长 韩版系。学妹 提交于 2020-01-03 03:39:07

问题


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:

  • Make the project using different path for each solution?
  • Maybe chain solutions in build to make Solution A always build with Solution B? But that sounds like loosing some benefits of splitting this one big solution to smaller ones.
  • Use any other approach to make it more granular and yet do not suffer problems with the necessity of rebuilding all? I've heard of private Nuget feeds, would that be an answer to this problem if my config allows that?

My config:

  • VCS: TFS with TFVC
  • IDE: Visual Studio Proffesional 2017
  • Default package management format: Packages.config

回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/55038882/managing-nuget-packages-for-c-sharp-project-present-in-multiple-solutions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!