Проект базы данных VisualStudio SQL sqlcmdvars TFS развертывание переопределяет пользовательский путь к файлу? - PullRequest
4 голосов
/ 18 октября 2011

У меня есть проект базы данных SQL в VisualStudio 2010 в системе управления версиями с TFS 2010 с несколькими ветвями, каждое из которых развертывается на разных серверах в зависимости от профиля конфигурации.

Использование файла sqlcmdvars с профилем конфигурации, добавленным вимя файла (Debug.sqlcmdvars и т. д.) для каждого профиля конфигурации позволяет мне указать уникальный путь к файлу для конкретной среды развертывания, используя зарезервированные имена Path1 и Path2 для файла mdf и файла журнала.

<?xml version="1.0" encoding="utf-8"?>
<SqlCommandVariables xmlns="urn:Microsoft.VisualStudio.Data.Schema.Package.SqlCmdVars">
  <Version>1.0</Version>
  <Properties>
    <Property>
      <PropertyName>Path1</PropertyName>
      <PropertyValue>C:\SQLSERVER LOG\$(DatabaseName)\</PropertyValue>
    </Property>
    <Property>
      <PropertyName>Path2</PropertyName>
      <PropertyValue>C:\SQLSERVER DATA\$(DatabaseName)\</PropertyValue>
    </Property>
  </Properties>
</SqlCommandVariables>

Теперь я пытаюсь добавить пользовательский файл FileStream со связанной FileGream FileGroup

enter image description here

Я добавил дополнительную запись в файлы sqlcmdvars:

<Property>
  <PropertyName>PathBlobStream</PropertyName>
  <PropertyValue>C:\SQLSERVER DATA\$(DatabaseName)\BlobStream\</PropertyValue>
</Property>

Но я не уверен, как указать базе данных использовать это по сравнению с тем, что объявлено в SchemaObjects \ Database Levels \ Storage \ BlobStore.sqlfile.sql:

ALTER DATABASE [$(DatabaseName)]
    ADD FILE (NAME = [BlobStore], FILENAME = 'C:\SQLSERVER DATA\####\BlobStream') TO FILEGROUP [BlobStreamFileGroup];

Как использовать новыйзапись в sqlcmdvars для переопределения пути для нового файла FileStream?

1 Ответ

1 голос
/ 18 октября 2011

Лучший способ сделать это - добавить дополнительные записи в файл dbproj, чтобы использовать другой файл схемы в зависимости от профиля конфигурации:

  <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
    <Build Include="Schema Objects\Database Level Objects\Storage\Files\BlobStore.sqlfile.sql">
      <SubType>Code</SubType>
    </Build>
  </ItemGroup>
  <ItemGroup Condition=" '$(Configuration)' == 'Internal' ">
    <Build Include="Schema Objects\Database Level Objects\Storage\Files\BlobStore.sqlfile.Internal.sql">
      <SubType>Code</SubType>
    </Build>
  </ItemGroup>

Ключом было копирование / вставка исходного файла схемы и добавление имени профиля конфигурации в имя файла. Это сохраняет вариант отладки с исходным именем файла, так что любые будущие сравнения схем будут игнорироваться дополнительными вариантами. Вы хотите включить дополнительные файлы схемы в систему управления версиями, но если вы выполните приведенный выше набор, они не будут отображаться в проекте. Я проверил, что MSBuild обрабатывает это правильно. Я скрещиваю пальцы, что TFS сделает то же самое.

...