VS 解决方案使用 git 子模块时如何解析 nuget 包
How to resolve nuget packages when using git submodules for VS Solution
我有两个存储库。第一个是大型集成存储库,里面有很多项目。第二个是比较小的解决方案,里面有很多项目,正在单独开发,然后集成到第一个解决方案中。
我将第二个 git 存储库添加到第一个 git 存储库作为子模块,所以我有这样的文件结构:
MainSolution.sln
SomeProject1
SomeProject2
packages
my-second-project
SecondSolution.sln
SomeProject3
SomeProject4
我的独立存储库(在恢复 nuget 包之后)看起来像
SecondSolution.sln
SomeProject3
SomeProject4
packages
现在,每个项目分别引用 nuget restore packages 文件夹。因此,我添加的子模块中的 None 个项目能够恢复其 nuget 包,因为它们搜索了不存在的 my-second-project/packages
文件夹。如果我重新安装 nuget 包,那么我可以在我的 git 差异中看到它们开始引用根包文件夹(如 ..\..\packages
)。
我该如何解决这个问题?
我通过将所有 *.csproj
文件中的 ..\packages
更改为 $(SolutionDir)\packages
来解决问题。效果很好。简单的脚本涵盖了它:
find -name "*.csproj" | xargs sed -i 's/\.\.\packages/$(SolutionDir)\packages/g'
不知道为什么 nuget 默认情况下不这样做,现在我需要 re-run 这个脚本,每当我 update/install nuget 包时。
我有两个存储库。第一个是大型集成存储库,里面有很多项目。第二个是比较小的解决方案,里面有很多项目,正在单独开发,然后集成到第一个解决方案中。
我将第二个 git 存储库添加到第一个 git 存储库作为子模块,所以我有这样的文件结构:
MainSolution.sln
SomeProject1
SomeProject2
packages
my-second-project
SecondSolution.sln
SomeProject3
SomeProject4
我的独立存储库(在恢复 nuget 包之后)看起来像
SecondSolution.sln
SomeProject3
SomeProject4
packages
现在,每个项目分别引用 nuget restore packages 文件夹。因此,我添加的子模块中的 None 个项目能够恢复其 nuget 包,因为它们搜索了不存在的 my-second-project/packages
文件夹。如果我重新安装 nuget 包,那么我可以在我的 git 差异中看到它们开始引用根包文件夹(如 ..\..\packages
)。
我该如何解决这个问题?
我通过将所有 *.csproj
文件中的 ..\packages
更改为 $(SolutionDir)\packages
来解决问题。效果很好。简单的脚本涵盖了它:
find -name "*.csproj" | xargs sed -i 's/\.\.\packages/$(SolutionDir)\packages/g'
不知道为什么 nuget 默认情况下不这样做,现在我需要 re-run 这个脚本,每当我 update/install nuget 包时。