我第一次尝试将 Visual Studio 2013 SQL Server 数据库项目与测试项目一起使用。它似乎在我的本地机器上工作正常,但在构建服务器上运行时出现错误,使用 TFS2013.4,由于路径不正确:
数据库部署失败。路径“C:\Builds\1\Database1\Database1.sqlproj”不是数据库项目文件的有效路径。
在运行测试之前它找不到要部署的数据库项目。
这是一个已知功能,这里有一个关于该主题的 MSDN 页面https://msdn.microsoft.com/en-us/library/jj851202 (v=vs.103).aspx(请参阅“修改”标题下的部分测试项目”)。但是,我发现解释不清楚。似乎也有一些错字,例如指令 6 似乎让你将 app.config 从 x 更改为 y,我看不出有什么区别。他们似乎在 BuildComputer.sqlunitttest.config 中也有一个额外的“t”,还是故意的?没有把握。
基于这个 MSDN 页面,我现在有一个 app.config,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="SqlUnitTesting" type="Microsoft.Data.Tools.Schema.Sql.UnitTesting.Configuration.SqlUnitTestingSection, Microsoft.Data.Tools.Schema.Sql.UnitTesting, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</configSections>
<SqlUnitTesting AllowConfigurationOverride="true">
<DatabaseDeployment DatabaseProjectFileName="..\..\..\Database1\Database1.sqlproj"
Configuration="Debug" />
<DataGeneration ClearDatabase="true" />
<ExecutionContext Provider="System.Data.SqlClient" ConnectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=SimpleUnitTestDB;Integrated Security=True;Pooling=False"
CommandTimeout="30" />
<PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=SimpleUnitTestDB;Integrated Security=True;Pooling=False"
CommandTimeout="30" />
</SqlUnitTesting>
</configuration>
AllowConfigurationOverride="true"
请注意添加到该SqlUnitTesting
部分的属性。
还有另一个名为 Azure-Dev-VS13.sqlunittest.config 的配置文件,其中 Azure-Dev-VS13 是构建服务器名称。这篇的内容是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="SqlUnitTesting" type="Microsoft.Data.Tools.Schema.Sql.UnitTesting.Configuration.SqlUnitTestingSection, Microsoft.Data.Tools.Schema.Sql.UnitTesting, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</configSections>
<SqlUnitTesting>
<DatabaseDeployment DatabaseProjectFileName="..\..\..\TestTeamProject\Database1\Database1.sqlproj"
Configuration="Debug" />
<DataGeneration ClearDatabase="true" />
<ExecutionContext Provider="System.Data.SqlClient" ConnectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=SimpleUnitTestDB;Integrated Security=True;Pooling=False"
CommandTimeout="30" />
<PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=SimpleUnitTestDB;Integrated Security=True;Pooling=False"
CommandTimeout="30" />
</SqlUnitTesting>
</configuration>
DatabaseProjectFileName
唯一的区别是属性中路径的更改。
我还在部署类别下添加了一个 Local.testsettings 到解决方案中的单个条目
<solutionDirectory>\TestProject1\Azure-Dev-VS13.sqlunittest.config
但是,无论我做什么,我都会收到相同的错误消息,没有对更改路径的引用,所以我认为它仍在读取原始 app.config。
上面的示例来自测试单机设置,其中开发机器、TFS 服务器和构建服务器是一台机器。但是,我在我们的完整开发环境中遇到了同样的错误。
有任何想法吗。谢谢。