为多个解决方案中存在的C#项目管理Nuget软件包

卡米尔(Kamil Stadryniak)

我现在处于重构一个大型项目的疯狂阶段,该项目有很多遗留和不稳定的模块我已决定拆分目前拥有所有项目的解决方案(因此,大约有20个项目,并且由于单元测试项目肯定会在下个月推出),因此将其捆绑在一起以使其更加独立和精细。

通过这种方法,需要在多个解决方案中引用或添加模块(例如API客户端)。

问题在于,Nuget软件包仅在最初首次添加的解决方案上得到恢复。所以最简单的例子:

解决方案A:

------ ProjectA

------ APIClient

解决方案B:

------项目B

------ APIClient

由于我们不包括packages文件夹,因此会导致Nuget软件包出现问题:

  1. 克隆仓库。

  2. 打开解决方案B,进行构建并还原Nugets以获得解决方案。

  3. 解决方案B中ClientAPI软件包的错误。

  4. 转到解决方案A进行构建并还原Nugets以获取解决方案

  5. 回到解决方案B。

  6. 在解决方案B中为ClientAPI还原了Nuget,并且错误消失了。

有办法吗?

  • 使每个解决方案的项目使用不同的路径?
  • 也许链式解决方案可以使解决方案A始终与解决方案B一起构建?但这听起来像是失去了将这一大解决方案拆分为较小的解决方案的某些好处。
  • 使用其他任何方法使它更精细,但又不会因重建全部而遭受麻烦吗?我听说过私有的Nuget提要,如果我的配置允许的话,是否可以解决这个问题?

我的配置:

  • VCS:带有TFVC的TFS
  • IDE:Visual Studio专业版2017
  • 默认软件包管理格式:Packages.config
刘o

为多个解决方案中存在的C#项目管理Nuget软件包

感谢您的回复。SolutionA用Project的两个解决方案重现了此问题APIClient而且SolutionB,加上现有项目APIClientSolutionASolutionB

然后,如果我们在上还原nuget包,则默认情况下SolutionB中SolutionB项目的包APIClient将还原\packagesSolutionB文件夹中的文件夹中,而不是该SolutionA文件夹中。

在这种情况下,项目APIClient仍然缺少中的.dll引用SolutionB,您仍然必须转到SolutionA并还原nuget软件包。这就是您遇到该问题的原因。

要解决此问题,您可以NuGet.ConfigSolutionA旁边添加一个文件SolutionB其中包含以下内容:

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

因此,该\packages文件夹与解决方案文件无关。

此外,如果你有兴趣,你可以尝试将转换packages.configpackagereference该项目APIClient,与此设置,NuGet包将被保存在全球包文件夹,C:\Users\<UserName>\.nuget\packages

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当多个解决方案中包含某些项目时,为所有解决方案设置一个公共的nuget软件包文件夹

从解决方案中删除nuget软件包还原

如何在.Net Core项目的解决方案中包含NuGet软件包?

在解决方案中的项目上使用时缺少NuGet软件包

如何删除解决方案中任何项目未引用的NuGet软件包?

.Net Standard 2.0生成NuGet软件包,包括同一解决方案中的项目和NuGet软件包

添加到解决方案中时,NuGet软件包可还原/安装到多个位置

在许多项目/解决方案中保持Nuget软件包的更新

广泛安装Nuget软件包解决方案

Visual Studio应用程序解决方案中缺少某些NuGet软件包

如何从解决方案中的所有项目中卸载* a *软件包

复制解决方案后软件包中缺少项目级别的连接

如何在解决方案的第二个项目中安装NuGet软件包?

在具有两个项目的一个解决方案文件中安装不同版本的nuget软件包

是否可以在解决方案中为单个项目创建 Nuget 包?

在同一解决方案中引用项目中的Nuget包所需的解决方案

使用“ nuget.exe恢复解决方案”时,软件包文件夹中的版本号错误

在解决方案中为单个项目禁用NuGet BuildPackage

您如何在解决方案中找到未使用的NuGet软件包?

您如何在解决方案中找到未使用的NuGet软件包?

如何成功恢复整个解决方案的nuget软件包?

启动解决方案时如何禁用恢复NuGet软件包

Nuget不会还原解决方案的软件包,但在为.csproj执行时可以工作

c#多项目解决方案管理依赖

如何在多个C#项目中实施相同的nuget软件包版本?

在单个解决方案中为VSTS部署多个项目

在一个解决方案 c# 上为多个项目使用 NLog

创建引用解决方案中另一个软件包的软件包

R MIP Dual解决方案中的GLPKAPI软件包