你应该在哪里存储第三方集会?

好的,我们有一个相当大的解决方案,里面有大约8个不同的项目。 这些项目中的每一个都依赖于各种不同的第三方组件。 此解决方案位于源控制的主干分支中。 我们还有大约5个不同的树干分支。

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

例如:我们所有的分支都映射到“C:\ Code \”。 因此trunk将是“C:\ Code \ Trunk”,而分支将是“C:\ Code \ somebranch”。

如果我在“C:\ Code \ Trunk”中创建一个名为“Assemblies”的文件夹,然后将所有第三方程序集放在该文件夹中,然后我添加一个程序集的引用,那个程序集引用是否相对? 如果我单击添加的程序集,我会看到灰色的路径属性显示为“C:\ Code \ Trunk \ Assemblies \ someassembly.dll”。

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

目前,我们实际上在源控件中有一个名为“Assemblies”的分支,它像任何其他分支一样映射到“C:\ Code \”。 因此,所有带有引用程序集的项目的分支都引用了“C:\ Code \ Assemblies \ someassembly.dll”,无论项目位于哪个分支,路径都是相同的。

不幸的是,这意味着您必须获得正在使用的分支的最新版本以及程序集分支,以便成功构建解决方案。

总而言之:

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

  • 管理第三方程序集的其他推荐策略是什么?

是的从主干使用程序集文件夹。 我比名称lib更喜欢assembly。

是的,路径已经是相对的。 分支项目时,将获得正确的程序集文件夹。

根据您使用的第三方程序集的数量,您还希望组织程序集文件夹,这样就不会有一大堆dll。

现在我们有了nuget,您可以将它用于所有支持的oss包,​​甚至可以为其他第三方程序集创建自己的nuget包 。 值得一提的是openwrap是nuget的替代品。

nuget在解决方案级别存储包

所以每个分支(和主干)都会保留这些分支的版本。

我建议这是更好的行为。 如果升级第三方,您可能希望将程序集版本分开。

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

我已经使用构建事件来将dll放到正确的位置。

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

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

Project文件包含以下内容:

 False ..\Solution Items\SomeAssembly.dll  

我通常创建一个所有其他人都参考的共同项目。 在这个常见项目中,我创建了一个名为deps的文件夹(用于依赖项)。 然后,每个其他项目在公共项目的deps文件夹中引用DLL的副本。