TFS和引用的DLLs

37
我们正在使用TFS和VS 2010。
我一直在处理一个项目,该项目使用TFS作为源代码控制。我下载了许多dll文件(如log4net)并将它们添加到我的项目引用中。
当一个新的程序员连接到TFS并从源代码控制中获取我的项目时,由于缺少这些引用的dll文件,项目构建失败了。
我在这里做错了什么?我如何将这些引用的DLL文件包含在源代码控制中? 我需要在引用这些DLL文件之前将它们全部添加到我的项目中吗?当我引用它们时,我只是浏览到了它们在我的文件系统中的位置。
4个回答

52
我发现处理第三方DLL的最佳方法是在sln/proj文件结构中创建一个"Library"文件夹,将所有必要的DLL复制到此本地文件夹中以供引用。同时,你需要确保这些DLL已经被检入源代码控制。这样,所有参与项目的人都会得到相同版本的所有DLL,并且引用路径完全相同。
在任意下载或安装位置引用第三方库将会有问题,因为它要求所有开发者维护所有DLL的相同下载结构。而且,如果每个人都在项目结构之外引用DLL,很难保证每个人都在同一版本上。
另一种选择是让每个人将DLL安装到GAC中,但这也可能会非常麻烦,特别是在版本管理和部署方面。

2
这样做的额外好处是,任何开发人员(新手或其他)都可以获取最新版本,按 F5 键,即可运行,而无需关心“我从哪里获取 DLL X 或如何安装 DLL Y”。 - Hector Correa
我在sln中创建了库文件夹,当我从服务器获取项目时,我必须添加所有引用。我做错了吗? - Mohsen
不要使用库文件夹,最好通过NuGet包管理器在解决方案级别上进行管理。我只同意上述解决方案,如果这些第三方dll无法通过NuGet获得。 - sandeep talabathula

8
我在项目文件夹中创建了一个“ThirdPartyDLL”文件夹,将所有额外的DLL复制到其中。然后进入源代码资源管理器,并将这些DLL添加到团队基础架构服务器中,以确保我使用特定应用程序版本的正确DLL版本(使每个人都处于与我相同的页面)。
查看 - 其他窗口 - 源代码控制资源管理器 右键单击项目文件夹 - 添加项目到文件夹
您将无法选择包含DLL的特定文件夹,但可以选择文件夹中的各个DLL文件。 然后,您将在此窗口中看到“ThirdPartyDLL”文件夹。
完成此操作后,这些dll位于基础架构服务器源代码控制中。每当开发人员签入时,他们将获取DLL的最新版本。
不要忘记删除应用程序中的旧引用并将其更改为thirdpartydll文件夹。
我曾经将DLL复制到bin文件夹中,但遇到的问题是DLL升级时会遇到问题。最初,当我的项目很小时,这并不是什么大问题。现在,我创建了多个DLL和应用程序,因此在项目外部维护一致的DLL版本变得非常困难。我最好的例子是我购买的许可证DLL。当这个DLL升级时,所有应用程序和库都需要处于同一版本。如果我忘记其中一个,那么就会出现奇怪的问题或应用程序停止工作。现在,我将所有东西放在一个文件夹中,只需更改一次即可完成升级。
希望这有所帮助。

2

安迪的建议很好,我过去也用过。在我目前的工作中,我们有一个“参考”文件夹放在网络共享上供我们所有人使用。不过,我们这里的网络非常快,而且所有开发人员都在同一个办公室。如果你有很多远程开发人员或者网络速度慢,这种解决方案可能效果不佳。


1

我尝试了各种方法来处理这个问题,并且最终选择将所需的dll文件放入bin文件夹中,并确保它们包含在项目的源代码控制中。我听说有人说这可能不是一个好主意,但没有人为此提供充分的理由,这对我来说效果很好。

我的第二选择将是在网络共享上开辟一些空间,并组织各种第三方dll文件。您可以将文件放入带版本号的文件夹中,以保持事物井然有序,每个人都应该可以访问他们需要的所有内容,只要每个人使用正常的网络路径作为参考即可。

在项目中添加单独的文件夹也是可行的,但看起来有点凌乱,因为您最终会得到一些不想包含在发布版本中的额外文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接