Mercurial 子回购(外部)环境中的NuGet

Mercurial 子回购(外部)环境中的NuGet,mercurial,nuget,mercurial-subrepos,Mercurial,Nuget,Mercurial Subrepos,我在Mercurial中有几个具有以下结构的存储库: 核心 整合 管理员 MyApp 从MyApprepo中,我想包括Core和Integration 我将这些作为子回购添加到MyApp,并将其放在Externals文件夹中 MyApp的文件夹结构大致如下: MyApp -业务逻辑 -数据访问 -外部 --核心 --集成 -网络 -包裹 这个问题与包文件夹有关。我在所有解决方案中都使用包还原,NuGet可以很好地下载所有包。该文件夹包含我的外部项目所依赖的包 唯一的问题是,从Core和Int

我在Mercurial中有几个具有以下结构的存储库:

  • 核心
  • 整合
  • 管理员
  • MyApp
MyApp
repo中,我想包括
Core
Integration

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

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

MyApp
-业务逻辑
-数据访问
-外部
--核心
--集成
-网络
-包裹

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

唯一的问题是,从
Core
Integration
到packages文件夹的相对路径现在是错误的


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

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

MyOtherApp
- BusinessLogic
- DataAccess
- Externals
-- SubFolder
--- Core
--- Integration
- Web
- packages
在本例中,如果您将nuget包添加到核心项目中,则引用将是
。/../../../packages/..
。而
核心
将在其他解决方案中再次被打破


另一个解决方案是从
Core
Integration
项目制作包,并通过nuget在其他解决方案中使用它们。“我的团队”用于此TeamCity,它可以打包项目、发布nuget软件包并作为nuget提要工作。

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

比如,我变了

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

$(SolutionDir)包\Moq.4.2.1312.1622\lib\net40\Moq.dll

您是在一个解决方案中使用外部还是在多个解决方案中使用外部?在多个解决方案中使用外部。
集成
项目将
核心
项目作为子回购
Core
很可能会被添加到大多数其他回购协议中。对不起,您能否澄清一下,您是将Core
Core
子回购协议克隆到每个回购协议(解决方案)中,还是只存储一份Core副本并将其链接到多个解决方案?我会将其克隆为我需要的每个回购协议中的子回购协议。这会起作用,但只有当
核心
集成
项目作为外部文件打开时,才可以使用。如果我直接打开解决方案,这将停止工作。基于Nuget理念的更好解决方案-从您的
核心
集成
项目制作包,并将其作为Nuget包用于其他解决方案是,事实上,我已经采取了这一路线,并且正在转储外部/子副本,因为它们会增加更多的混乱。将您的答案更改为有关Nu-Get的内容,我会将其标记为答案,您就可以获得分数。我已经在使用TeamCity,所以Nu-Get的私人订阅源是不需要动脑筋的:)
<HintPath>$(SolutionDir)packages\Moq.4.2.1312.1622\lib\net40\Moq.dll</HintPath>