如何在同一 VS 解决方案中为使用不同包源的项目修复 Nuget 还原

问题描述

我使用的是 VS 2017,我有一个新的通用项目(CommonLib),需要在多个解决方案中被项目引用。对于这个常见的项目,我想维护自己的包文件夹。并且在将此项目引用到现有解决方案(具有引用不同包文件夹的项目)后,nuget restore 不会同时查看这两个包文件夹。

不确定在单个解决方案中 nuget restore 是否可以搜索多个包文件夹以根据项目文件提示路径解析引用库。 此外,我看到从 packages.config 迁移到 packagereference 会有所帮助,但我不想在现有项目中删除 packages.config,也不想在新的 CommonLib 项目中删除以保持一致。

这是我的 src 设置路径:

UX.Sln - paths: C:\Src\UX\UX.Sln; C:\Src\UX\packages;
    UXSource.csproj - paths: C:\Src\UX\UXSource; This refers nuget libs from src C:\Src\UX\packages
    CommonLib.csproj - paths: C:\Src\Common\CommonLib; I want to refer nuget libs from src C:\Src\Common\packages

Api.Sln - paths: C:\Src\Api\Api.Sln; C:\Src\Api\packages;
    ApiSource.csproj - paths: C:\Src\Api\ApiSource; This refers nuget libs from src C:\Src\Api\packages
    CommonLib.csproj - paths: C:\Src\Common\CommonLib; I want to refer nuget libs from src C:\Src\Common\packages

解决方法

看起来另一个项目没有配置 NuGet 源。所以你可以使用

dotnet nuget add <source> 命令 documentation

或在 NuGet.Config 文件中使用扩展它。 https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file#package-source-sections

也请尝试将文件夹位置打包在nuget.config

 <configuration>
      <config>
        <add key="repositoryPath" value="$\..\pacakges" />
      </config>
    </configuration>
,

如果要通过多个 nuget 包源恢复 nuget 包。您只需要放置自定义 nuget.config 文件。

并且如您所见,custom nuget.config file 将作用于当前文件夹下的当前项目和所有子目录下的项目。

并且 nuget.config 文件无法添加到项目文件夹中,它应该在解决方案文件夹下或上面的文件夹中才能使其工作。

此外,您似乎已将名为 CommonLib 的现有项目添加到 UX 解决方案和 Api 解决方案中。

所以你可以试试这个:

1)nuget.config 下添加一个名为 C:\Src 的文件,然后在该文件下添加以下节点:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <add key="NuGet_Restore_Path1" value="C:\Src\UX\packages" />
        <add key="NuGet_Restore_Path2" value="C:\Src\Common\packages" />
        <add key="NuGet_Restore_Path3" value="C:\Src\Api\packages" />
    </packageSources>
</configuration>

2) 那么,这两种解决方案都可以使用这些包文件夹来恢复丢失的 nuget 包。

使用:nuget restore UX.slnnuget restore Api.Sln

另外,如果您不希望新的nuget.config文件影响src文件夹下的其他解决方案,您可以将该文件添加到C:\Src\UX和{ {1}} 代替。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...