2011-04-20 43 views
5

好的,所以我们有一个相当大的解决方案,其中包含大约8个不同的项目。这些项目中的每一个都依赖于各种不同的第三方组件。此解决方案位于源代码管理的主干分支中。我们还有大约5个不同的分支。你应该在哪里存储第三方程序集?

什么是管理这些第三方组件的最佳方式?当您添加对组件的引用,然后单击它并查看属性窗口时,我注意到它具有组合件的硬编码路径。

例如:我们所有的分支机构都映射到 “C:\代码\”。因此,主干将是“C:\ Code \ Trunk”,分支将是“C:\ Code \ somebranch”。

如果我创建一个文件夹“C:\代码\干线”称为“组件”,然后删除所有的第三方组件该文件夹中,然后我引用添加到装配在那里组装的参考相对是?如果我点击添加的程序集,我看到灰色的路径属性显示“C:\ Code \ Trunk \ Assemblies \ someassembly.dll”。

,如果我然后分支树干,会发生什么? “somebranch”仍然会引用“C:\ Code \ Trunk \ Assemblies \ someassembly.dll”,或者它会引用“C:\ Code \ somebranch \ Assemblies \ someassembly.dll”吗?

目前我们确实有在源代码管理的分支称为被映射“组件”,就像任何其他分支,到“C:\代码\”。因此,无论项目位于哪个分支,所有引用程序集的分支都引用“C:\ Code \ Assemblies \ someassembly.dll”,路径将相同。

不幸的是,这意味着你必须获得最新版本你的工作在分支和组件分支,以获得成功地构建解决方案。

要总括起来:

  • 你如何添加一个参考,是相对于该如何解决? (即添加对C:\ Code \ Trunk \ Assemblies \ someassembly.dll的引用,并使该路径相对于添加它的项目,以便在创建分支时引用分支的程序集文件夹而不是主干的程序集文件夹。这是参考已经相对?

  • 什么是管理第三方组件等推荐的策略?

回答

2

是使用树干外的组件文件夹。我更喜欢名字lib,然后装配。

是的路径已经相对。当你分支你的项目将得到正确的程序集文件夹。

根据您所使用你让也想组织你的组件文件夹,以便它不是dll的一个大麻烦多少第三方组件。

+0

正确的,我们确实有Assemblies文件夹分成整齐的子目录。只要这些路径是相对的,那么我认为这不是问题。谢谢您的帮助。 – Chev 2011-04-20 16:59:20

0

我通常创建一个共同的项目,所有的人引用,里面是共同的项目,我创建一个文件夹称为deps(用于依赖关系)。其他项目中的每一个然后在公共项目的deps文件夹中引用该DLL的副本

5

现在我们有nuget您可以将它用于所有支持的oss包,​​甚至可以为其他第三方组件创建your own nuget packages。值得一提的是openwrap作为nuget的替代品。在解决方案级别

的NuGet店包,这样每个分支(和干线)将保持版本的这些。

我建议这是更好的行为。例如,如果升级第三方,您会希望保持程序集版本不同。

在过去,我使用svn的externals命令从内部开发的依赖项构建特定版本。没有理由不能将它们存储在存储库中,并使用外部(或者您的scm等价物)来获得正确的版本。

我已经使用构建事件来让dll进入正确的位置。

1

我们在第三方参考解决方案中有一个SolutionItems文件夹。 解决方案的每个分支都有自己的副本。

当我们添加一个引用时,我们使用添加引用对话框中的'浏览'选项卡并选择相对于我们当前项目的程序集。

项目文件包含此:

<Reference Include="SomeAssembly, Version=0.1.0.0, Culture=neutral, PublicKeyToken=8xxxxxxxxxxx, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\Solution Items\SomeAssembly.dll</HintPath> 
</Reference> 
相关问题