사용자 지정 구성 요소에서 멀티 타기팅 지원Support multi-targeting in your custom components

이제 SSDT(SQL Server Data Tools)에서 SSIS 디자이너를 사용하여 SQL Server 2016, SQL Server 2014 또는 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. Visual Studio 2015용 SSDT를 다운로드하려면 최신 SQL Server Data Tools 다운로드를 참조하세요.To get SSDT for Visual Studio 2015, see Download Latest SQL Server Data Tools.

솔루션 탐색기에서 Integration Services 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성 을 선택하여 프로젝트에 대한 속성 페이지를 엽니다.In Solution Explorer, right-click on an Integration Services project and select Properties to open the property pages for the project. 구성 속성일반탭에서 TargetServerVersion 속성을 선택하고 SQL Server 2016, SQL Server 2014 또는 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.

프로젝트 속성 대화 상자의 TargetServerVersion 속성TargetServerVersion property in project properties dialog box

사용자 지정 구성 요소에 대한 여러 버전 지원 및 멀티 타기팅Multiple version support and multi-targeting for custom components

다섯 가지 유형의 모든 SSIS 사용자 지정 확장은 멀티 타기팅을 지원합니다.All five types of SSIS custom extensions support multi-targeting.

  • 연결 관리자Connection managers
  • 태스크Tasks
  • EnumeratorsEnumerators
  • 로그 공급자Log providers
  • 데이터 흐름 구성 요소Data flow components

관리되는 확장의 경우 SSIS 디자이너는 지정된 대상 버전에 대한 확장 버전을 로드합니다.For managed extensions, SSIS Designer loads the version of the extension for the specified target version. 예를 들어For example:

  • 대상 버전이 SQL Server 2012인 경우 디자이너는 2012 버전의 확장을 로드합니다.When the target version is SQL Server 2012, the designer loads the 2012 version of the extension.
  • 대상 버전이 SQL Server 2016인 경우 디자이너는 2016 버전의 확장을 로드합니다.When the target version is SQL Server 2016, the designer loads the 2016 version of the extension.

COM 확장은 멀티 타기팅을 지원하지 않습니다.COM extensions do not support multi-targeting. SSIS 디자이너는 항상 지정된 대상 버전에 관계 없이 SQL Server의 현재 버전에 대한 COM 확장을 로드합니다.SSIS Designer always loads the COM extension for the current version of SQL Server, regardless of the specified target version.

여러 버전 및 멀티 타기팅에 대한 기본 지원 추가Add basic support for multiple versions and multi-targeting

기본 지침은 SQL Server 2016용 SSDT 2015의 다중 버전 지원으로 지원 받을 SSIS 사용자 지정 확장 가져오기를 참조하세요.For basic guidance, see Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016. 이 블로그 게시물은 다음 단계 또는 요구 사항을 설명합니다.This blog post describes the following steps or requirements.

  • 적절한 폴더에 어셈블리를 배포합니다.Deploy your assemblies to the appropriate folders.

  • SQL Server 2014 이상 버전에 대한 확장 맵 파일을 만듭니다.Create an extension map file for SQL Server 2014 and high versions.

버전을 전환하는 코드 추가Add code to switch versions

사용자 지정 연결 관리자, 태스크, 열거자 또는 로그 공급자의 버전 전환Switch versions in a custom connection manager, task, enumerator, or log provider

사용자 지정 연결 관리자, 태스크, 열거자 또는 로그 공급자의 경우 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.
    }
}

사용자 지정 데이터 흐름 구성 요소에서 버전 전환Switch versions in a custom data flow component

사용자 지정 연결 관리자, 태스크, 열거자 또는 로그 공급자의 경우 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;
    }
}

일반 오류Common errors

InvalidCastExceptionInvalidCastException

오류 메시지Error message. 'System.__ComObject' 형식의 COM 개체를 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100' 인터페이스 유형으로 캐스트할 수 없습니다.Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100'. 이 작업은 IID '{BE8C48A3-155B-4810-BA5C-BDF68A659E9E}'로 인터페이스에 대한 COM 구성 요소에 대한 QueryInterface 호출이 다음 오류: 지원되는 인터페이스 없음(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).

해결 방법Solution. 사용자 지정 확장이 Microsoft.SqlServer.DTSPipelineWrap 또는 Microsoft.SqlServer.DTSRuntimeWrap와 같은 SSIS interop 어셈블리를 참조하는 경우 Embed Interop Types 속성의 값을 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".

Interop 형식 포함

대상 버전이 SQL Server 2012인 경우 일부 형식을 로드할 수 없습니다.Unable to load some types when target version is SQL Server 2012

이 문제는 IErrorReportingService 또는 IUserPromptService와 같은 특정 유형에 영향을 줍니다.This issue affects certain types such as IErrorReportingService or IUserPromptService.

오류 메시지(예)Error message (example). 어셈블리 'Microsoft.DataWarehouse, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'에서 'Microsoft.DataWarehouse.Design.IErrorReportingService' 형식을 로드할 수 없습니다.Could not load type 'Microsoft.DataWarehouse.Design.IErrorReportingService' from assembly 'Microsoft.DataWarehouse, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'.

해결 방법Workaround. 대상 버전이 SQL Server 2012인 경우 이러한 인터페이스 대신 MessageBox를 사용합니다.Use a MessageBox instead of these interfaces when the target version is SQL Server 2012.