问题描述
我使用的是 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.sln
和 nuget restore Api.Sln
。
另外,如果您不希望新的nuget.config
文件影响src
文件夹下的其他解决方案,您可以将该文件添加到C:\Src\UX
和{ {1}} 代替。