0

我第一次尝试将 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 服务器和构建服务器是一台机器。但是,我在我们的完整开发环境中遇到了同样的错误。

有任何想法吗。谢谢。

4

1 回答 1

1

SSDT 博客中描述了更详细的操作指南版本。

请使用此博客文章作为参考。在我们发言时,MSDN 文档正在更新。

三件事很重要

  1. 更新测试项目中的 SqlDatabaseSetup.cs 文件的要求。对于 C#,需要在 SqlDatabaseSetup 类中添加以下代码。

    静态 SqlDatabaseSetup() { Environment.SetEnvironmentVariable("VisualStudioVersion", "12.0"); }

  2. TFS2013 具有不同的文件夹结构。应根据您的设置设置相对路径。例如,我有一个带有“E2ECIDB”和“E2ECITest”项目的解决方案“E2ECI”。它位于名为“DataDevelopers”的 TFS 项目源代码控制存储库下。我的设置中的 TFS 构建文件夹结构是 e:\LocalTFSBuild\Builds\2\DataDevelopers\E2ECI\src\E2ECI\E2ECIDB。

相对路径从 e:\LocalTFSBuild\Builds\2\DataDevelopers\E2ECI\bin 目录开始,因此变为 ..\src\E2ECI\E2ECIDB\E2ECI.sqlproj

  1. 目前存在覆盖 app.config 文件的已知错误。推荐的方法是修改 app.config 文件以设置 TFS 服务器的路径,并为本地测试运行的解决方案中的每个开发人员或本地开发机器添加额外的配置文件。
于 2015-07-28T21:34:16.987 回答