我们正在使用 TFS 和 VS 2010。
我一直在从事一个使用 TFS 作为源代码控制的项目。 我已经下载了相当多的 dll(例如 log4net)并在我的项目中引用。
当新程序员连接到 TFS 并使我的项目脱离源代码控制时,它无法构建,因为它说缺少所有这些引用的 dll。
我在这里做错了什么?如何将这些引用的 DLL 包含在源代码管理中。 我是否需要在引用所有这些 dll 之前将它们添加到我的项目中?当我引用它们时,我只是浏览到它们在我的文件系统上的位置。
我发现第 3 方 DLL 的最佳实践是在 sln/proj 文件结构中创建一个“Library”文件夹,并将所有必需的 DLL 复制到此本地文件夹中以供参考。 您还需要确保这些 DLL 已签入源代码管理。 这样,参与该项目的每个人都会获得所有 DLL 的完全相同版本,并且引用路径也完全相同。
在任意下载或安装位置引用第 3 方库将会出现问题,因为这将要求所有开发人员为所有 DLL 维护相同的下载结构。 此外,如果每个人都引用项目结构之外的 DLL,则很难保证每个人都使用相同的版本。
另一种选择是让每个人都将 DLL 安装到 GAC 中,但这也可能很痛苦,尤其是在版本管理和部署方面。
我在项目文件夹中创建了一个“ThirdPartyDLL”文件夹,将所有额外的 DLL 复制到其中。 然后,我进入源资源管理器并将这些 DLL 添加到 Team Foundation 服务器中,这样我就可以确定我为应用程序的特定版本使用了正确版本的 DLL(因此其他人都在与我完全相同的页面上) ).
查看 - 其他窗口 - 源代码管理浏览器 右键单击项目文件夹 - 将项目添加到文件夹
您将无法选择其中包含 DLL 的特定文件夹,但您可以选择该文件夹中的各个 DLL 文件。 然后您将看到“ThirdPartyDLL”文件夹出现在该窗口中。
完成此操作后,这些 dll 将位于 Team Foundation 源代码管理中。 每当开发人员签入时,他们都会获得最新版本的 DLL。
不要忘记删除应用程序中的旧引用并将其更改为您的thirdpartydll文件夹。
我曾经将 DLL 复制到 bin 文件夹中,但遇到的问题是 DLL 升级时。 最初,当我的项目很小时,这没什么大不了的。 现在我创建了多个 DLL 和应用程序,在项目之外维护 DLL 版本的一致性变得非常困难。 我最好的例子是我购买的许可 dll。 升级后,所有应用程序和库都需要处于同一版本。 如果我忘记了一个,那么我就会遇到奇怪的问题,或者应用程序就会停止工作。 现在我将所有内容都放在一个文件夹中,只需进行一次更改,所有内容都会升级。
希望这有帮助。
Andy 的建议很好,我过去也用过。 在我目前的工作中,我们在网络共享上有一个“参考”文件夹,供我们所有人构建。 不过,我们这里的网络非常快,而且所有开发人员都在一个办公室里。 如果您有很多远程开发人员或网络速度较慢,则此解决方案将无法正常工作。
我尝试了各种方法来处理这个问题,并决定将所需的 dll 放入 bin 文件夹中,并确保它们包含在源代码控制项目中。我听人们说这可能不是一个好主意,但没有人提供充分的理由,而且它对我来说效果很好。
我的第二个选择是在网络共享上开辟一些空间并在那里组织各种第 3 方 dll。您可以将文件放在带有版本号的文件夹中,以保持一切正常,每个人都应该可以访问他们需要的所有内容,只要每个人都使用正常的网络路径作为参考。
在项目中添加单独的文件夹也是可行的,但看起来很混乱,因为您最终会得到不想包含在版本中的额外文件。
我遇到了同样的问题,在研究了一些内容后,我发现问题是源代码管理资源管理器在出于某种原因签入新文件夹时喜欢排除 dll。
我假设有一些设置默认设置了这个。我所做的是查看排除的项目,底部有一个选项卡显示包含项目。我单击了它,然后包含了那些缺少签入的文件夹中的所有 dll。
无论如何,我希望这可以帮助其他遇到同样问题的人。