Переключение версии библиотеки собственного компонента SSIS

Способ реализации переключения версии библиотеки собственного компонента SSIS при переключении в настройках пакета версии SQL Server.

Все разрабатываемые собственные компоненты SSIS жестко привязаны к конкретной версии SQL Server. При создании SSIS-пакета необходимо указывать используемую версию и на панели компонентов (SSIS Toolbox) будет отображаться только те компоненты, которые подходят для этой версии.

Для того, чтобы ваш компонент был совместим с различными версиями SQL Server и корректно реагировал на изменение версии в настройках пакета, необходимо выполнить ряд требований к разрабатываемом компоненту.

Отдельная библиотека для каждой версии SQL Server

Для каждой версии SQL Server необходимо иметь отдельную библиотеку с вашими компонентами. Это необходимо хотя бы потому, что для каждой версии SQL Server используются свои версии библиотек Microsoft (какие именно можно посмотреть тут).

Разные версии библиотек

У каждой библиотеки должна быть своя версия. Это необходимо для того, чтобы все из можно было разместить в GAC.

Нумерация версий может быть произвольная.

Единая подпись (Strong Name)

Во всех библиотеках необходимо использовать единый файл подписей (Strong Name). Это позволит считать несколько библиотек, созданных в разных проектах, просто разными версиями одной и той же библиотеки.

Mappings

Для библиотек необходимо создать XML-файлы, описывающий правила обновления компонента с более старых версии на текущую.

Каждый XML-файл размещается в своей папке в соответствии с версией SQL Server:

  • SQL Server 2012: C:\Program Files (x86)\Microsoft SQL Server\110\DTS\UpgradeMappings
  • SQL Server 2014: C:\Program Files (x86)\Microsoft SQL Server\120\DTS\UpgradeMappings
  • SQL Server 2016: C:\Program Files (x86)\Microsoft SQL Server\130\DTS\UpgradeMappings

Например для библиотеки под SQL Server 2016 файл MyOrg.UpgradeMapping.2016.xml может выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<Mappings xmlns="http://www.microsoft.com/SqlServer/Dts/UpgradeMapping.xsd">
  <ExtensionMapping tag="My Custom Components - SQL 2012"
      oldAssemblyStrongName="MyOrg.SSIS.MyCustomComponents, Version=2012.0.0.0, Culture=neutral, PublicKeyToken=5a65bfc32a580c9f"
      newAssemblyStrongName="MyOrg.SSIS.MyCustomComponents, Version=2016.0.0.0, Culture=neutral, PublicKeyToken=5a65bfc32a580c9f" />
  <ExtensionMapping tag="My Custom Components - SQL 2014"
      oldAssemblyStrongName="MyOrg.SSIS.MyCustomComponents, Version=2014.0.0.0, Culture=neutral, PublicKeyToken=5a65bfc32a580c9f"
      newAssemblyStrongName="MyOrg.SSIS.MyCustomComponents, Version=2016.0.0.0, Culture=neutral, PublicKeyToken=5a65bfc32a580c9f" />
</Mappings>

В файле описано, как производить обновление с версии 2012.0.0.0 на текущую версию 2016.0.0.0 и с 2014.0.0.0 также на текущую версию 2016.0.0.0.

Для библиотеки под SQL Server 2014 файл MyOrg.UpgradeMapping.2014.xml будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<Mappings xmlns="http://www.microsoft.com/SqlServer/Dts/UpgradeMapping.xsd">
  <ExtensionMapping tag="My Custom Components - SQL 2012"
    oldAssemblyStrongName="MyOrg.SSIS.MyCustomComponents, Version=2012.0.0.0, Culture=neutral, PublicKeyToken=5a65bfc32a580c9f"
    newAssemblyStrongName="MyOrg.SSIS.MyCustomComponents, Version=2014.0.0.0, Culture=neutral, PublicKeyToken=5a65bfc32a580c9f" />
</Mappings>

Для библиотеки под SQL Server 2012, для данного примера, файл не нужен, потому что более старой библиотеки нет.

Файлы расположены в разных папках и могут иметь произвольные имена (в том числе одинаковые).

Extensions

Также для библиотек необходимо создать еще один XML-файл. В нем необходимо перечислить все SSIS-компоненты в библиотеке с указанием реализующих их классов.

XML-файл нужен только для библиотек, у которых есть более ранняя версия. В противном случае будет ошибка The component metadata for "..." could not be upgraded to the newer version of the component. The PerformUpgrade method failed..

Файлы размещаются в тех же папках, что и файлы Mappings.

Для библиотеки под SQL Server 2016 файл MyOrg.Extensions.2016.xml будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<Extensions xmlns="http://www.microsoft.com/SqlServer/Dts/Extensions.xsd">
  <PipelineComponents>
    <PipelineComponent Identifier="MyOrg.SSIS.MyCustomSource" Model=".NET">
      <CreationName>MyOrg.SSIS.MyCustomSource, MyOrg.SSIS.MyCustomComponents, Version=2016.0.0.0, Culture=neutral, PublicKeyToken=5a65bfc32a580c9f</CreationName>
  </PipelineComponent>
  <PipelineComponents>
    <PipelineComponent Identifier="MyOrg.SSIS.MyCustomDestination" Model=".NET">
      <CreationName>MyOrg.SSIS.MyCustomDestination, MyOrg.SSIS.MyCustomComponents, Version=2016.0.0.0, Culture=neutral, PublicKeyToken=5a65bfc32a580c9f</CreationName>
    </PipelineComponent>
  </PipelineComponents>
</Extensions>

Ссылки

About the author

Добавить комментарий