2017-01-13 10 views
1

devenv.exeを使用してCIでデータベースプロジェクトを構築します。 ConfigurationManagerのすべての[展開]チェックボックスは無効になっています。 sqlprojファイルのDeployToDatabaseはFalseに設定されています。 私はCIの.dacpacプロジェクトチェックを避けるには?

devenv.exe "PathToSln\MySln.sln" /build /Release /Out "LogFile.log" 

そして、各ビルドのようDEVENV.EXE使用し、私はエラーを取得する:「システム・バージョン管理の現在と歴史の表がスキーマに一致する必要はありません。」私はこのエラーの意味を知っています、そして、私は今それと一緒に暮らすべきです。だから、質問は、コマンドラインからdevenv.exeのスキーマ検証を削除する方法です。

+0

スキーマ検証はまったく削除できますか?それはUIを介して可能ですか(私はそうではないと思っています)。それがあれば、コマンドラインスイッチではなく設定ファイルのほうが多いかもしれません。 – paulbarbin

+0

@paulbarbin、私はそれを無効にする方法がありません。 このhttps://msdn.microsoft.com/en-us/library/hh272681(v=vs.103).aspx#bkmk_evf msdnページでは拡張検証を無効にすることを推奨していますが、VSではそのようなオプションは表示されません。 – Oxoron

答えて

1

データベースプロジェクトは、常にdacpacファイルを生成する前にスキーマを検証します。これに代わる方法はありません。また、スキーマ検証はデプロイメントとは無関係です。プロジェクトによって定義されたデータベースが内部的に一貫しているかどうかをチェックしています。

あなたの一時テーブルでエラーを修正する必要があります。

  • マシンにインストールSSDTのバージョンが古いと、このエラーは、ほとんどの時間的テーブル定義のために発生する原因となるバグがあります。私はここで起こっ可能と考えることができる3つのものがあります。お使いのマシンにSSDTの最新バージョンがインストールされていることを確認してください。

  • あなたのプロジェクトには、実際には無効な一時テーブル定義が含まれています。これは、プロジェクト内の現行テーブルと履歴テーブルの両方を定義するが、2つのテーブルの構造が異なる場合に発生します。テーブルスキーマが一致するか、履歴テーブルが暗黙的に定義されていることを確認します(つまり、履歴テーブル名は指定されていますが、履歴テーブル自体は独自のcreate table文でプロジェクト内のどこにも定義されません)。

  • 一時テーブルがまだ修正されていないバグがあります。これは、暗黙的な履歴テーブル定義で発生します。明示的に定義された履歴テーブルに切り替えるか、VSを閉じて、sqlprojファイルの横のディスクにあるDBMDLキャッシュファイルを自動的に削除して、問題を回避してください。

+0

あなたのアイデアやあなたの時間のために多くのthx。残念ながら、私は暗黙的に履歴テーブルを定義しており、DBMDLは各ビルドでもう一度作成されます。また、ローカルマシン上のビルドが正しく行われるため、dbをチェックしない方法が必要です。 – Oxoron

+1

SSDTのバグが修正されるまで明示的に定義された履歴テーブルに切り替えることをお勧めします。マイクロソフトでは、データベース構造をチェックせずにプロジェクトを構築する方法を紹介しません。 –

+0

私はDBMDLファイルの強制削除を設定しました。 @Steven thxあなたの助けにたくさん。 – Oxoron

0

カスタムビルド定義でこれを修正する必要があります。/Release用にビルドする代わりに、CI_Buildと呼ばれるビルド定義を作成し、コードプロジェクトをビルドしてデータベースプロジェクトをスキップするだけで済みます。

以前にカスタムビルド定義を作成していない場合、[デバッグ]または[リリース]を選択するドロップダウンメニューから[構成マネージャ]を選択し、ビルドまたはDBプロジェクトをオフにできます対応する[ビルド]列)、または[アクティブなソリューション構成]ドロップダウンから["]を選択してカスタムビルドを作成します。次に、新しいものを作成し、ビルドするものとスキップするものを構成します。

+0

悲しいことに、私は.dacpacファイルが必要なので、プロジェクトビルドをスキップできません。しかし、Schema ValidationとDeployを避けることができると確信しています。なぜなら、私はローカルで同じエラーが発生しないからです。 – Oxoron

関連する問題