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 をソリューションに追加し、Deployment カテゴリの下に 1 つのエントリを追加しました。

<solutionDirectory>\TestProject1\Azure-Dev-VS13.sqlunittest.config

ただし、何をしても、変更されたパスへの参照なしで同じエラーメッセージが表示されるため、元の app.config をまだ読み取っていると思います。

上記の例は、開発マシン、TFS サーバー、およびビルド サーバーが 1 台のマシンであるテスト用の 1 台のマシンのセットアップからのものです。ただし、完全な開発環境でも同じエラーが発生します。

何か案は。ありがとう。

4

1 に答える 1

1

ハウツー ガイドのより詳細なバージョンは、このSSDT ブログで説明されています。

このブログ記事を参考にしてください。MSDN のドキュメントは、私たちが話しながら更新されています。

3つのことが重要

  1. テスト プロジェクトで SqlDatabaseSetup.cs ファイルを更新する必要があります。C# の場合、次のコードを SqlDatabaseSetup クラスに追加する必要があります。

    static 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 に答える