NuGet在子回购(外部)环境中

时间:2012-08-28 08:44:40

标签: mercurial nuget mercurial-subrepos

我在Mercurial中有一些存储库,具有以下结构:

  • 核心
  • 集成
  • 管理
  • MyApp的

MyApp回购,我想要加入CoreIntegration

我将这些作为子回购添加到MyApp,并将其放在Externals文件夹中。

MyApp的文件夹结构大致如下:

MyApp的
  - BusinessLogic
  - DataAccess
  - 外部人员
  - 核心
  - 整合
  - 网站   - 包

问题与packages文件夹有关。我在所有解决方案中使用包恢复,NuGet可以很好地下载所有包。该文件夹包含我的外部项目所依赖的包。

唯一的问题是,从CoreIntegration到包文件夹的相对路径现在是错误的。

有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

我认为您可以手动修复它,您的引用应该具有以../../packages开头的相对提示路径。但是为了避免将来所有,包含此项目的解决方案必须具有相同的结构。 例如,对于其他解决方案,您具有以下结构:

MyOtherApp
- BusinessLogic
- DataAccess
- Externals
-- SubFolder
--- Core
--- Integration
- Web
- packages

如果在这种情况下您将nuget包添加到Core项目,则引用将为../../../packages/...Core将再次在其他解决方案中被打破。

其他解决方案是来自CoreIntegration项目的make包,并通过nuget在其他解决方案中使用它们。我的团队使用这个TeamCity,它可以打包项目,发布nuget包,并作为nuget feed out the box。

答案 1 :(得分:1)

如果您仍希望将其保留为子存储库(而不是将项目作为NuGet包引用),则可以修改提示路径以始终搜索解决方案目录。

例如,我改变了

<HintPath>..\..\packages\Moq.4.2.1312.1622\lib\net40\Moq.dll</HintPath>

<HintPath>$(SolutionDir)packages\Moq.4.2.1312.1622\lib\net40\Moq.dll</HintPath>