Не удается развернуть проект базы данных - VSDBCMD не видит строку подключения в манифесте
В этом руководстве показано, как определить пользовательский рабочий процесс для развертывания базы данных из Team Foundation Build: http://msdn.microsoft.com/en-us/library/ff805001.aspx
Однако, когда TFS пытается развернуть мою базу данных, он жалуется, что я должен указать строку подключения. Я предоставил файл.deploymanifest в качестве параметра командной строки, а в файле.deploymanifest есть строка подключения.
Почему VSDBCMD жалуется, что я не ввел строку подключения? Он также жалуется на неразрешенные ссылки, которые также содержатся в файле.deploymanifest.
Ниже приведены несколько верхних строчек моего файла.deploymanifest:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TargetConnectionString>Data Source=SQL2K8DEV;Integrated Security=True;Pooling=False</TargetConnectionString>
<TargetDatabase>Super_DB</TargetDatabase>
<DeployToDatabase>True</DeployToDatabase>
<DeployToScript>True</DeployToScript>
.
.
.
РЕДАКТИРОВАТЬ: приведенный выше фрагмент файла.deploymanifest не является правильным. Я взял этот фрагмент из файла.deploymanifest, сгенерированного моей локальной сборкой, а не сборкой TFS. .Deploymanifest, сгенерированный сборкой TFS, был неверным, что привело меня к исследованию используемой конфигурации, что в конечном итоге решило мою проблему (см. Ответ ниже).
И вот ошибки, которые я получаю от VSDBCMD:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy\VSDBCMD.EXE /a:Deploy /dd+ /dsp:Sql /manifest:RTS.deploymanifest
Before you can deploy a database, you must specify a connection string in the project properties or at a command prompt.
TSD\\TXDASQL2K8DEV\RTS_Deploy\DEV_Nightly_build\RTS Development Nightly Build\RTS Development Nightly Build_20111202.7\RTS.dbschema (380,7)
- The reference to external elements from the source named 'Master.dbschema' could not be resolved, because no such source is loaded.
2 ответа
Оказывается, что при сборке использовалась конфигурация Release, и мне пришлось только настроить конфигурацию Debug для развертывания в БД. Тьфу. Как только я обновил конфигурацию релиза, все заработало.
Мой первоначальный вопрос вводил в заблуждение, поскольку я взял первые несколько строк из моего локально созданного.deploymanifest вместо.deploymanifest, сгенерированного сборкой TFS. Мне стыдно...
Не на 100%, но я использовал тот же процесс ( этот) для развертывания баз данных на наших внутренних блоках SQL Server в автоматических сборках, вы можете установить строку соединения с помощью аргумента в конструкторе рабочих процессов довольно легко.
Так что если вы создаете новый аргумент в конструкторе ** с именем DBServer (например) в Invoke VSDBCMD
задача, которую вы можете добавить " /cs:Data Source=" + DBServer + ";Integrated Security=True;Pooling=False"
На самом деле стоит поиграть с этим, так как вы можете параметризовать весь VSDBCMD (например, имя манифеста), чтобы сделать общую сборку / развертывание базы данных, которую затем можно использовать для других сборок, которые у вас могут быть (если вы этого еще не сделали).
** вы также можете отредактировать способ отображения и дать ему полезное имя / описание в определении сборки, используя Metadata
свойство в списке аргументов.