NuGet和Git子模块

Mat*_*sca 24 .net git git-submodules nuget nuget-package-restore

我已经广泛搜索了一个解决方案,尝试了不同的方法但没有工作,所以我在这里问.

我目前需要的是拥有单独的Git存储库,每个存储库包含一个带有相关项目的.Net解决方案文件.这些存储库中的一个或多个将仅包含类库,我需要在其他存储库解决方案中使用这些库.

我的第一个是使用Git子模块来避免难看的复制粘贴,并且在开发应用程序时仍然可以使用类库的源代码.

所以我的尝试是包含子模块,然后在我当前的解决方案中"添加现有项目"并加载所需的类库(ies).

我无法克服的巨大问题是Nuget包恢复.导入的项目引用"..\Packages*"中的库,但是当作为子模块导入时,它们位于另一个子文件夹中,因此无法找到所需的依赖项:

- MySolution.sln
- Packages folder
- MyAppProject folder
- Submodule folder
-- EXPECTED packages folder for MyLibraryProject that I cannot generate
-- MyLibraryProject folder
Run Code Online (Sandbox Code Playgroud)

我找到并试过的一个解决方案就是这个,但它有两个主要问题:

  • 它应该使用MsBuild包恢复工作,我绝对不想使用它
  • 即使尝试使用MsBuild包恢复它根本不起作用,我仍然在我当前的解决方案文件夹中有一个Packages文件夹.也许我做错了但又一次,我不想使用MsBuild方法.

现在我真的想知道是否有一个干净的方法来解决这个问题,或者我唯一能做的就是放弃在我的应用程序解决方案中提供库源代码并在私有NuGet提要和参考上发布我的库他们从那里.

谢谢.

小智 6

听起来你的问题是子模块中的项目与repo的解决方案处于不同的目录级别.这是一个常见的Nuget问题,因为它在解决方案级别进行恢复.您可以在此处使用修复提示路径脚本将您的引用替换为$(SolutionDir),并可能解决该问题. https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/README.md#fixhintpathsps1


小智 5

..\packages您可以通过将所有 *.csproj 文件中的所有位置更改为$(SolutionDir)\packages. 效果很好。这个脚本涵盖了它:

find -name "*.csproj" | xargs sed -i 's/\.\.\\packages/$(SolutionDir)\\packages/g'