Проекты Visual Studio Data используют две фазы развертывания.
Файлы развертывания, созданные путем создания проекта базы данных, на самом деле представляют собой всего лишь пакет метаданных, который описывает желаемое конечное состояние базы данных, но не знает, где будет развернуто, или это новая база данных или существующая база данных.
Вторая часть фактически выполняет пакет развертывания для конкретной базы данных, существующей или новой. Для этого Visual Studio должна запускать diff с базой данных и пакетом развертывания и определять, какие изменения необходимо применять, и генерировать сценарий, необходимый для применения этих изменений.
Итак, проблема заключается в том, что если вы включаете первую часть в MSI, вам нужно что-то запустить на компьютере конечного пользователя, чтобы применить эти изменения к неизвестному количеству неизвестных баз данных в поле, t действительно поставляют им Visual Studio.
К счастью, MS также содержит командную строку (VSDBCMD.exe), которая позволяет вам принять этот единственный пакет развертывания и использовать его для применения изменений к любой базе данных. Этот инструмент будет выполнять ту же разницу, что и Visual Studio, и сгенерировать сценарий SQL, необходимый для создания/обновления этой базы данных (любой фактически запускает скрипт, если вы так выбираете, на основе парматеров командной строки). См. http://msdn.microsoft.com/en-us/library/dd193283.aspx для получения информации о том, как вызвать его из командной строки.
Итак, я видел, как вы отправляете этот инструмент командной строки с вашим приложением (просто убедитесь, что вы дважды проверяете лицензию на перераспределение, чтобы убедиться, что все в порядке) и пользовательское действие в вашей MSI (или какой-либо другой утилите), которая выполняет его для изменения базы данных. А также проверьте зависимости для инструмента командной строки, я знаю, что для этого требуются объекты SMO SQL, собственный клиент SQL и, возможно, несколько других вещей. Вы хотите убедиться, что MSI включает в себя эти предпосылки.
Спасибо за ответ. Мы уже создали утилиту, которая создает и обновляет базы данных на серверах клиента. Мы должны были создать это много лет назад. Теперь мы пытаемся выяснить, как использовать проект базы данных и что нам нужно сделать для нашей утилиты. Я посмотрел на VSDBCMD, но он не указан в REDIST.TXT, поэтому мы не можем его распространять. Хотя, есть сообщения в блоге, которые утверждают, что их можно перераспределять, возможно, я читаю неправильную лицензию. –
Интересно, по-видимому, это действительно упоминалось в VS 2008: http://blogs.msdn.com/b/gertd/archive/2008/08/22/redist.aspx, но я не вижу соответствующей информации в любом месте VS 2010. –