使用带有 SQL Server 2012 SSMS 的 TFS 2010 源代码管理来管理 SQL 脚本

Using TFS 2010 Source Control with SQL Server 2012 SSMS to manage SQL Scripts

我一直需要在 TFS 源代码管理中管理组织为 SSMS 解决方案(.ssmssln 文件)的 SQL 脚本集合。

我想捕获 "success path" 以将 SQL Server 2012 SSMS 与 TFS2010 结合使用,使用适当的 MSSCCI 提供程序和团队资源管理器版本和安装顺序。

我正在使用 SQL 服务器产品的 "Developer Edition",运行 在我的 Win7-64 开发箱本地,并且需要访问由一个维护的 TFS 2010 服务器不同的组。 VS2012 和 VS2013 也安装在这个 "new" 开发箱上,我从它们访问我们的 TFS 2010 服务器没有任何问题。

我一直试图从 SQL Server 2012(开发人员版)获取 SSMS 以与我们的 TFS Server 2010 一起工作一段时间,但没有成功。我终于让 SSMS 2012/TFS 2010 组合在新的开发箱上工作,但留下了问题 "what was it that actually worked",其他记录的解决方案 none 解决了这个组合。这个没有: 请参阅:SQL Server Scripts 2012 Project into Team Foundation Server 2012,它解决了 SSMS 2012 和 TFS 2012。

我公司的 TFS 版本往往比我们的 VS 和 SQL 版本落后 1 个主要版本。

其他文章没有解决我问题的步骤。 https://dba.stackexchange.com/questions/17850/tfs2010-for-ssms-2012; the 2010 Team Explorer plus 2012 MSSCCI provider did not work for the SSMS 2012 + TFS 2010 combination. This article, http://www.techtree.co.uk/sql-server/management-studio-ssms/use-team-foundation-server-tfs-as-your-source-control-in-ssms/,虽然有帮助,但并没有真正讨论团队资源管理器要求,只是在其他人的评论中简短地讨论过。

我使用 MSSCCI 提供程序让 SSMS 2008R2 和 TFS2010 组合在旧机器上运行良好。当我搬到一个新机器上,从 SQL Server 2012 安装 SSMS,并打开和编辑我的 SSMS 解决方案(打开 .ssmssln 文件)时,我没有运气让集成的 TFS 源代码控制工作,尽管尝试多种不同的 MSSCCI 提供程序版本和 TFS Team Explorer 版本。

从 SSMS2012 开始,我会看到 "Connect to a Team Foundation Server" 对话框,其中包含一个空的 TFS 服务器下拉列表,然后尝试添加我公司的服务器,不可避免地会出现 404 错误,尽管输入了相同的值在我的旧 Win7-64 机器上适用于 SSMS 2008R2/TFS2010。

我认为最终对我有用的组合是:

  1. 为 Visual Studio 2012 安装团队资源管理器 http://www.microsoft.com/en-gb/download/details.aspx?id=30656

  2. 为 Team Foundation Server 2010 安装 MSSCCI 提供程序https://visualstudiogallery.msdn.microsoft.com/bce06506-be38-47a1-9f29-d3937d3d88d6

完成这两件事后,我记得收到了打开团队资源管理器的提示。我相信它是在安装 MSSCCI 2010 提供程序之后或在 SSMS 2012 中配置源代码管理时为我启动的。

有趣的是,当 Team Explorer 启动时,它显示 "the Visual Studio 2010 logo." 不管怎样,我打开它,然后去添加 TFS 服务器。这一次,在添加服务器框中有一个额外的条目,它显示了我们的 TFS 2010 服务器的 TFS "initial path"(或 "instance name")。

我们的 TFS 服务器地址似乎是: http://OurTFSServer:8080/tfs

以前,没有地方可以输入它的“/tfs”部分。这一次,它出现在添加 TFS 服务器地址对话框中,我相信已经为我预填充了。

在我看来,缺少的部分是 VS2012 团队资源管理器的安装,它似乎知道“/tfs”初始路径,而 VS2010 团队资源管理器则不知道。奇怪的是,启动的 Team Explorer 显示了 VS2010 标志;请注意,在安装 VS2012 Team Explorer 然后安装 TFS 2010 MSSCCI Provider 之前,我明确卸载了 VS2010 Team Explorer。

为了让事情变得有趣,MSSCI 提供程序的版本号和日期令人困惑。以下是 "readme.txt" 文件对 MSSCCI 版本号的说明。该文件位于:

Program Files (x86)\Microsoft Team Foundation MSSCCI Provider\readme.txt

新系统:

Microsoft Team Foundation Server MSSCCI Provider
v 3.5                          09/20/2013

旧系统:

Microsoft Team Foundation Server MSSCCI Provider
v 4.0                          03/07/2012

因此,在我的 "old" SSMS 2008R2 和 TFS2010 开发箱上工作的组合似乎是 Visual Studio 2010 的团队资源管理器,以及 Team Foundation Server 2012 的 MSSCCI 提供程序。我那个盒子上还安装了 VS2010、VS2012 和 VS2013。

在 "new" 框中,SSMS 2012 和 TFS2010 的工作组合是 Visual Studio 2012 的 Team Explorer,以及 Team Foundation Server 2010 的 MSSCCI Provider(具有旧版本编号,但 build/release 日期较新,与 2012 MSSCCI 提供商相比)。

我正在寻找的是使用此组合、SSMS 2012 和 TFS 2010 的其他人,以根据他们的经验确认 and/or 阐明所需内容和顺序的 "success path"从实际让这个组合工作。不是 "should" 的作用(通常不会),而是 DID 的作用。

随着时间的推移,通过迁移到更适合的技术并更新到所涉及的 Microsoft 技术的已知兼容版本,此问题已在多个方面得到解决。

1) 我通过使用 Newtonsoft 的 JSON.NET 序列化数据,将大部分 SQL 脚本内容更改为 JSON 文件。现在我不再需要维护这些 SQL 脚本。相反,我将数据从 JSON 文件加载到对象,并在使用数据的应用程序中实施了 serialize/deserialize 方法。这比 SQL 好得多,因为保存的大部分数据都涉及 "content" 的表示。

内容表示为文档包,每个包包含多个文档模板,每个模板由多个段落组成。在对象模型上下还有数据包、模板和段落的其他属性。所以 JSON serialization/deserialization 是一种更适合这些应用程序的方式。它还启用了 "single piece flow" 方法来更新内容。现在我管理 JSON 个文件而不是 SQL 个脚本,以保留这些内容对象的时间点快照。通常我会备份所有文档包对象的先前版本作为每个内容发布的一部分,并将该备份存储在 TFS 中。

2) 在其他方面我仍然需要维护 SQL 脚本,例如应用程序中的可重用查询。 (出于配置灵活性的原因,我不想使用存储过程)我找到了一种方法,可以通过资源文件使这些 SQL 查询成为 .NET 程序集的一部分,并且满足了需求。我使用的方法类型的一个示例如下:https://jopinblog.wordpress.com/2007/11/12/embedded-resource-queries-or-how-to-manage-sql-code-in-your-net-projects/

3) 我公司将我们的 TFS 服务器升级到 TFS 2012,我们开始使用 Visual Studio 2012 和 2013。SSMS 中的问题在使用较新的已知兼容配置时开始起作用。