如何根据 visual studio 版本将 sql 服务器单元测试项目指向 localdb?

How to point sql server unit test project to localdb depending on visual studio version?

我有一个 Sql 服务器数据库单元测试项目,我按照此处的说明进行设置:https://msdn.microsoft.com/en-us/library/jj851212(v=vs.103).aspx

我的机器上一切正常。我有 visual studio 2013 终极版,这意味着我的单元测试项目 app.config 中的 localdb 连接字符串指向服务器 (localdb)\ProjectsV12.

问题是我的一些同事有专业版,这意味着他们的数据库位于:(localdb)\Projects。因此,如果他们从 TFS 和 运行 单元测试中检查出来,他们将不得不更改 app.config 中的连接字符串。我希望它尽可能无缝,这样他们就不必做任何特别的事情——只需检查项目、构建和 运行 测试。

我该如何解决这个问题,以便单元测试项目根据您的 VS 版本指向正确的 localdb 服务器?

在不同版本的 VS 之间迁移项目时出现问题。一旦您打开项目的任何版本,而不是项目在迁移向导中创建的版本,就会弹出有关 SQL Express 和 LocalDb 的常见问题。但是与您的问题相关的主要问题似乎是组织测试代码文件夹结构的问题。

  1. 设置您的文件夹结构,与在 TFS 中一样。实现这一目标的一种简单方法是转至 Visual Studio 在线并创建一个新的团队测试项目,并使用根文件夹调用 'test'。为团队中的所有人授予访问权限。使用您的 VS 客户端连接并映射您的本地存储库,然后签入您的项目。让您的团队也这样做。

我从以下博客中找到了解决方案post: https://blogs.msdn.microsoft.com/ssdt/2014/07/24/sql-server-database-projects-and-team-foundation-build/#unitTests

通过让每个人运行执行以下命令,我确定每个人都有一个名为 (localdb)\v11.0

的实例
%ProgramFiles%\Microsoft SQL Server0\Tools\Binn\SqlLocalDB.exe i

或者:

"%ProgramFiles%\Microsoft SQL Server0\Tools\Binn\SqlLocalDB.exe" i

现在,我会将 app.config 连接字符串指向 v11.0。如果我发现由于某种原因这个实例不适用于特定的数据库项目或者某人没有具有该名称的实例,我将添加一个预构建步骤以在 ProjectsV12:

下安装一个实例
"%ProgramFiles%\Microsoft SQL Server0\Tools\Binn\SqlLocalDB.exe" create ProjectsV12 -s

根据博客:

If you want your database unit test to deploy the database to LocalDB\ProjectsV12, you will need to add a pre-test script to your build to create the instance. Running this command multiple times is safe.