我第一次尝试将Visual Studio 2013 SQL Server数据库项目与测试项目一起使用。它似乎在我的本地计算机上正常工作,但由于路径不正确而在使用TFS2013.4在构建服务器上运行时出现错误:
数据库部署失败。路径 'C:\ Builds \ 1 \ Database1 \ Database1.sqlproj'不是a的有效路径 数据库项目文件。
在运行测试之前找不到要部署的数据库项目。
这是一项已知功能,此主题上有一个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服务器和构建服务器是一台机器。但是,我在完整的开发环境中遇到了同样的错误。
任何想法。感谢。
答案 0 :(得分:1)
此SSDT blog中描述了更详细的操作指南版本。
请使用此博文作为参考。正如我们所说,MSDN文档正在更新。
三件事很重要
要求更新测试项目中的SqlDatabaseSetup.cs文件。对于C#,需要在SqlDatabaseSetup类中添加代码。
static SqlDatabaseSetup() { Environment.SetEnvironmentVariable(&#34; VisualStudioVersion&#34;,&#34; 12.0&#34;); }
TFS2013具有不同的文件夹结构。应根据您的设置设置相对路径。例如,我有一个解决方案&#39; E2ECI&#39;与'E2ECIDB&#39;和&#39; E2ECITest&#39;项目。它位于名为&#39; DataDevelopers&#39;的TFS项目源控制存储库下。我的设置中的TFS构建文件夹结构是e:\ LocalTFSBuild \ Builds \ 2 \ DataDevelopers \ E2ECI \ src \ E2ECI \ E2ECIDB。
相对路径从e:\ LocalTFSBuild \ Builds \ 2 \ DataDevelopers \ E2ECI \ bin目录开始,因此它变为.. \ src \ E2ECI \ E2ECIDB \ E2ECI.sqlproj