2

我正在使用颠覆和南特(和视觉工作室 IDE)

我一直在遵循http://blog.jpboodhoo.com/NAntStarterSeries.aspx上建议的项目结构,它提倡自包含颠覆目录,开发人员可以在其中进行结帐并立即一步构建项目。

我的回购结构是这样的:

/Repo
  /MainProject
    /trunk
      /doc   <-- documentation
      /lib   <-- binary-only DLLs
      /src   <-- source code for MainProject
      /tools <-- holds tools like nant, nunit, etc
...
  /ClassLibrary1
    /trunk
      /doc
      /lib
      /src
      /tools
...
  /ClassLibrary2
    /trunk
      /doc
      /lib
      /src
      /tools

不清楚的是如何构建一个具有类库的项目,这些类库又引用第三方库 dll 本身。

目前,我有一个主项目,其工作目录如下

例子:

/MainProject
  /build
  /lib
  /src
    /MainProject
    /ClassLibrary1 <-- svn external to svn://server/repo/ClassLibrary1/trunk/src
    /ClassLibrary2 <-- svn external to svn://server/repo/ClassLibrary2/trunk/src
  /tools
  ...

在构建 MainProject 时,我编译类库并将 dll 输出到构建文件夹。但是,类库本身具有它们引用的第 3 方纯二进制 DLL。

我的问题是为了构建 MainProject,我必须以某种方式将第 3 方 DLL 从类库中获取到构建输出中。我怎么做?

想法: 1. 我应该将这些第 3 方 dll 的副本存储在 MainProject 的 lib 文件夹中吗?2. 或者我的 svn:external 引用应该指向类库项目的主干而不是 src 以便我可以访问类库的 lib 文件夹?3. 我应该对单个文件使用 svn:externals 的 subversion 1.6 功能吗?

4

3 回答 3

1
  1. 我应该将这些 3rd 方 dll 的副本存储在 MainProject 的 lib 文件夹中吗? 我更喜欢将任何外部库存储在主干下的二进制目录中,但在源代码旁边......或将其称为引用、依赖项等。这样任何开发人员都可以获取最新信息,并且所有需要的东西都会下来。它不需要成为项目本身的一部分。它只需要在执行构建时可访问。

  2. 或者我的 svn:external 引用应该指向类库项目的主干而不是 src,以便我可以访问类库的 lib 文件夹? 我不喜欢这种方法,因为它使新开发人员启动和运行的过程更加复杂。我认为当一个程序集对自己具有一定程度的重要性时,它可以进入自己的存储库。但我永远不会参考它的输出。它应该有一个围绕它的构建过程,以促进一种将输出“部署”到上述引用或依赖项目录的机制。然而,像这样自动化部署可能会充满问题。如果程序集有自己的流程,那就更好了。当新版本的程序集发布时,它会被需要它的项目的开发人员手动接受。然后,他们可以对其进行测试、接受并将其放入构建过程中。显然,如果该组件每天都在变化,则可能需要一些自动化。

  3. 我应该对单个文件使用 svn:externals 的 subversion 1.6 功能吗? 不,我更喜欢将项目/解决方案作为一个独立的实体。将tenticals 分散在所有地方会使依赖关系更加痛苦。尽可能地保持孤岛……尽可能手动地引入新事物……或者尽可能手动地改变事物的频率。

于 2009-08-13T22:28:26.407 回答
1

我个人带来了引用库的后备箱。(实际上,我引入了标签的根,但这不是重点)。

如果您保留所需 dll 的单独副本,那么您实际上并没有允许引用的库确定它自己需要什么,因为所有这些逻辑在项目中都是重复的。如果您使用多个外部引用或文件外部来引入代码和 dll,也会发生同样的事情。

我的原则是——库知道它需要什么,对库的单个外部引用可以获得该库及其所需的一切。

这样,如果您更改库的引用,您可以确信任何和所有项目都会选择它。(如果 IDE 不支持这个,那是 IDE 的问题,而不是 subverion 的问题)。作为一个项目,您也可以确信,如果您更改所指向的库的版本,您也将自动获得正确的引用,并且不需要去调试构建失败来找出问题所在.

于 2009-08-14T07:39:21.980 回答
0

我有类似的需求,并在 TortoiseSVN 的文档中找到了一个简短的答案:

http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-howto-common-projects.html

于 2010-12-01T18:17:44.670 回答