Supportare più destinazioni in componenti personalizzatiSupport multi-targeting in your custom components

È ora possibile usare Progettazione SSIS in SQL Server Data Tools (SSDT) per creare, gestire ed eseguire pacchetti destinati a SQL Server 2016, SQL Server 2014 o SQL Server 2012.You can now use SSIS Designer in SQL Server Data Tools (SSDT) to create, maintain, and run packages that target SQL Server 2016, SQL Server 2014, or SQL Server 2012. Per ottenere SSDT per Visual Studio 2015, vedere Scaricare la versione più recente di SQL Server Data Tools.To get SSDT for Visual Studio 2015, see Download Latest SQL Server Data Tools.

In Esplora soluzioni fare clic con il pulsante destro del mouse su un progetto di Integration Services e scegliere Proprietà per aprire le pagine delle proprietà per il progetto.In Solution Explorer, right-click on an Integration Services project and select Properties to open the property pages for the project. Nella scheda Generale di Proprietà di configurazioneselezionare la proprietà TargetServerVersion , quindi scegliere SQL Server 2016, SQL Server 2014 o SQL Server 2012.On the General tab of Configuration Properties, select the TargetServerVersion property, and then choose SQL Server 2016, SQL Server 2014, or SQL Server 2012.

Proprietà TargetServerVersion nella finestra di dialogo delle proprietà del progettoTargetServerVersion property in project properties dialog box

Supporto di più versioni e destinazioni per i componenti personalizzatiMultiple version support and multi-targeting for custom components

Tutti e cinque i tipi di estensioni personalizzate di SSIS supportano più destinazioni.All five types of SSIS custom extensions support multi-targeting.

  • Gestioni connessioniConnection managers
  • AttivitàTasks
  • EnumeratorsEnumerators
  • Provider di logLog providers
  • Componenti del flusso di datiData flow components

Per le estensioni gestite, la finestra di progettazione SSIS carica la versione dell'estensione per la versione di destinazione specificata.For managed extensions, SSIS Designer loads the version of the extension for the specified target version. Esempio:For example:

  • Quando la versione di destinazione è SQL Server 2012, la finestra di progettazione carica la versione 2012 dell'estensione.When the target version is SQL Server 2012, the designer loads the 2012 version of the extension.
  • Quando la versione di destinazione è SQL Server 2016, la finestra di progettazione carica la versione 2016 dell'estensione.When the target version is SQL Server 2016, the designer loads the 2016 version of the extension.

Le estensioni COM non supportano più destinazioni.COM extensions do not support multi-targeting. La finestra di progettazione SSIS carica sempre l'estensione COM per la versione corrente di SQL Server, indipendentemente dalla versione di destinazione specificata.SSIS Designer always loads the COM extension for the current version of SQL Server, regardless of the specified target version.

Aggiungere il supporto di base per più versioni e destinazioniAdd basic support for multiple versions and multi-targeting

Per linee guida di base, vedere Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016 (Ottenere estensioni SSIS personalizzate supportate da più versioni di SSDT 2015 per SQL Server 2016).For basic guidance, see Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016. In questo post di blog vengono descritti i passaggi o requisiti seguenti.This blog post describes the following steps or requirements.

  • Distribuire gli assembly nelle cartelle appropriate.Deploy your assemblies to the appropriate folders.

  • Creare un file di mapping delle estensioni per SQL Server 2014 e versioni successive.Create an extension map file for SQL Server 2014 and high versions.

Aggiungere il codice per passare da una versione all'altraAdd code to switch versions

Passare da una versione all'altra in una gestione connessione, attività, enumeratore o provider di log personalizzatiSwitch versions in a custom connection manager, task, enumerator, or log provider

Per una gestione connessione, attività, enumeratore o provider di log personalizzati, aggiungere logica di downgrade nel metodo SaveToXML.For a custom connection manager, task, enumerator, or log provider, add downgrade logic in the SaveToXML method.

public void SaveToXML(XmlDocument doc, IDTSInfoEvents events)
{
    if (TargetServerVersion == DTSTargetServerVersion.SQLServer2014)
    {
        // Add logic to downgrade from SQL Server 2016 to SQL Server 2014.
    }

    if (TargetServerVersion == DTSTargetServerVersion.SQLServer2012)
    {
         // Add logic to downgrade from SQL Server 2016 to SQL Server 2012.
    }
}

Passare da una versione all'altra in un componente flusso di dati personalizzatoSwitch versions in a custom data flow component

Per una gestione connessione, attività, enumeratore o provider di log personalizzati, aggiungere logica di downgrade nel nuovo metodo PerformDowngrade.For a custom connection manager, task, enumerator, or log provider, add downgrade logic in the new PerformDowngrade method.

public override void PerformDowngrade(int pipelineVersion, DTSTargetServerVersion targetServerVersion)
{
    if (targetServerVersion == DTSTargetServerVersion.DTSTSV_SQLSERVER2014)
    {
        // Add logic to downgrade from SQL Server 2016 to SQL Server 2014.
        ComponentMetaData.Version = 8;
    }

    if (targetServerVersion == DTSTargetServerVersion.DTSTSV_SQLSERVER2012)
    {
          // Add logic to downgrade from SQL Server 2016 to SQL Server 2012.
        ComponentMetaData.Version = 6;
    }
}

Errori comuniCommon errors

InvalidCastExceptionInvalidCastException

Messaggio di erroreError message. Impossibile eseguire il cast dell'oggetto COM di tipo 'System.__ComObject' al tipo di interfaccia 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100'.Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100'. Questa operazione non è riuscita perché la chiamata QueryInterface sul componente COM per l'interfaccia con IID '{BE8C48A3-155B-4810-BA5C-BDF68A659E9E}' non è riuscita a causa dell'errore seguente: interfaccia non supportata (eccezione da HRESULT: 0x80004002 (E_NOINTERFACE)).This operation failed because the QueryInterface call on the COM component for the interface with IID '{BE8C48A3-155B-4810-BA5C-BDF68A659E9E}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)). (Microsoft.SqlServer.DTSPipelineWrap).(Microsoft.SqlServer.DTSPipelineWrap).

Soluzione.Solution. Se l'estensione personalizzata fa riferimento all'assembly di interoperabilità di SSIS, ad esempio Microsoft.SqlServer.DTSPipelineWrap o Microsoft.SqlServer.DTSRuntimeWrap, impostare il valore della proprietà Incorpora tipi di interoperabilità su False ".If your custom extension references SSIS interop assemblies such as Microsoft.SqlServer.DTSPipelineWrap or Microsoft.SqlServer.DTSRuntimeWrap, set the value of the **Embed Interop Types property to **False".

Incorpora tipi di interoperabilità

Impossibile caricare alcuni tipi quando la versione di destinazione è SQL Server 2012Unable to load some types when target version is SQL Server 2012

Questo problema interessa determinati tipi, ad esempio IErrorReportingService o IUserPromptService.This issue affects certain types such as IErrorReportingService or IUserPromptService.

Messaggio di errore (esempio).Error message (example). Impossibile caricare il tipo 'Microsoft.DataWarehouse.Design.IErrorReportingService' dall'assembly 'Microsoft.DataWarehouse, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'.Could not load type 'Microsoft.DataWarehouse.Design.IErrorReportingService' from assembly 'Microsoft.DataWarehouse, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'.

Soluzione alternativa.Workaround. Usare un elemento MessageBox anziché queste interfacce quando la versione di destinazione è SQL Server 2012.Use a MessageBox instead of these interfaces when the target version is SQL Server 2012.