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

时间:2011-04-20 16:45:08

标签: c# .net asp.net version-control tfs

好的,我们有一个相当大的解决方案,里面有大约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的程序集文件夹。或者这个参考已经是相对的吗?

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

4 个答案:

答案 0 :(得分:5)

现在我们有nuget你可以将它用于所有支持的oss包,​​甚至为其他第三方程序集创建your own nuget packages。值得一提的是openwrap作为nuget的替代方案。

nuget在解决方案级别存储包

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

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

Project文件包含:

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

答案 3 :(得分:0)

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