如何使用SharpsVN正确生成复杂的外部结构?

时间:2018-07-15 04:40:00

标签: c# sharpsvn externals

我有一个非常复杂的使用subversion的存储库结构。这在很大程度上与我团队的局限性,安全要求以及项目的依赖关系有关。因此,此处使用的结构不是 可选的,因此无法更改。

存储库结构由以下模式组成:

root-|- main -|- branches
     |        |- tags
     |        |- trunk - main - plugins
     |
     |- modules -| - module1 -|- branches
                 |            |- tags
                 |            |- trunk - module1 - plugins - plugin1
                 |            |- modules - ...
                 |
                 | - module2 -|- branches
                 |            |- tags
                 |            |- trunk - module2 - plugins - plugin2
                 |            |- modules - ...

每个外部文件的来源是一个pluginX文件夹。目标是下一级干线的plugins文件夹(或main的plugins文件夹)。不幸的是,几乎没有该API的文档。我怀疑我需要某种方式的propset函数,但是在我无法找到的地方,也没有找到任何示例的地方,都没有描述如何指向特定的目标目录和源目录。

编辑:每个模块都可以单独拉出,并且可以独立于根项目工作。我不能只为此使用根。地狱,我什至无法敌对这个问题!!

2 个答案:

答案 0 :(得分:0)

在“根”文件夹中创建一个文件夹build,并使用relative path引用您解决方案中的项目,然后将其output folder的所有项目配置为build\xxx folder,所有输出文件夹也是relative path。在主程序中,再次用相对路径配置assembly bindings。使用这种模式,无论谁下载回购,他们都可以将项目编译到相同的根文件夹,并使用相同的配置进行调试。

对于非常复杂的依赖项,例如A => B => C => D,第一次打开解决方案A,如果未编译B / C / D且未对其进行引用,则A将显示引用警告,您必须打开并编译B&C&D,那么A就会起作用。但是通常,我们应该在解决方案A中添加B / C / D,因此,在我们第一次打开它时就没有更多错误了。

有时,某些源代码未对所有开发人员开放,因此他们只能获取已编译的dll,对于这些dll,我们需要另一个文件夹(如“工具”),其中包括源代码服务器中的所有已编译程序集。我们在解决方案中添加file referencesrelative path,并将它们配置为"Copy to local"=true

对于许多项目,我们将使用构建后或构建前事件将文件从某个位置加载或复制到某个位置,它们也都必须是相对路径。

答案 1 :(得分:0)

回答我自己的问题。我正在使用的库具有在给定文件夹绝对路径的情况下设置本地系统中给定文件夹外部的功能。该库是C版本的库的一个移植,很明显,作者只是假设人们会“知道”到那里去。