大規模なソリューションの一部である私のプロジェクトは、dbproj から asqlproj (SSDT) に変換されました。このソリューションには、SSDT プロジェクトを参照する WiX インストーラーが含まれています。WiX プロジェクトは、VS2010 を介して複数の開発者システムで正常にビルドされます。ただし、常に使用してきた自動ビルドは、次のエラーで失敗しています。
error CNDL0150: Undefined preprocessor variable '$(var.DatabaseProject.TargetDir)'.
ソリューションは、このプロジェクトが変換される前に、何ヶ月も問題なく TFS 自動ビルドによってビルドされてきました。ビルド ログから、SSDT プロジェクトがビルドされていることがわかります。ビルド ログの関連する行を次に示します。
Project "C:\B\1\SourcePath\Server\Server.wixproj" (8) is building "C:\B\1\SourcePath\Database\DatabaseProject.sqlproj" (12) on node 1 (default targets).
...
Done Building Project "C:\B\1\SourcePath\Database\DatabaseProject.sqlproj" (default targets).
また、データベース プロジェクトの .dacpac ファイルと .dll ファイルが作成され、TFS ビルドがプロジェクトをリダイレクトした出力ディレクトリにコピーされていることも確認できます。
データベース プロジェクトへの参照は問題ないようで、TFS ビルドはビルドする必要があることを認識しているようですが、WiX は TargetDir の未定義のプリプロセッサ変数について不平を言っています。
何か不足しているに違いありません...TFS によって採用されている出力リダイレクトが問題の原因ですか? ここからどこへ行くべきかわかりません。あなたが提案できる助けに感謝します。
より詳しい情報
ビルドのログ ファイルを詳しく見ると、.sqlproj
プロジェクトのパラメータがコマンド ラインで に渡されていないことがわかりますcandle.exe
。VS2010 でローカルにビルドすると、予想されるパラメーターが次のように渡されることがわかります (WiX プロジェクトによって参照される他のプロジェクトと同様)。
-d"DatabaseProject.FullConfiguration=Release|AnyCPU"
-dDatabaseProject.Platform=AnyCPU
-dDatabaseProject.ProjectDir=C:\SourcePath\Database\
-dDatabaseProject.ProjectExt=.sqlproj
-dDatabaseProject.ProjectFileName=DatabaseProject.sqlproj
-dDatabaseProject.ProjectName=DatabaseProject
-dDatabaseProject.ProjectPath=C:\SourcePath\Database\DatabaseProject.sqlproj
-dDatabaseProject.TargetDir=C:\SourcePath\Database\sql\release\
-dDatabaseProject.TargetExt=.dll
-dDatabaseProject.TargetFileName=DatabaseProject.dll
-dDatabaseProject.TargetName=DatabaseProject
-dDatabaseProject.TargetPath=C:\SourcePath\Database\sql\release\DatabaseProject.dll
これらのパラメーターはcandle.exe
、TFS ビルド中に渡されません。この情報は、質問への回答に役立つ可能性があると考えました。
どんな助けでも大歓迎です!