好的,我们有一个相当大的解决方案,里面有大约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的程序集文件夹。或者这个参考已经是相对的吗?
管理第三方程序集的其他推荐策略是什么?
答案 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的副本。