Erstellen, Bereitstellen und Debuggen von benutzerdefinierten ObjektenBuilding, Deploying, and Debugging Custom Objects

Nachdem Sie den Code für ein benutzerdefiniertes Objekt für Integration ServicesIntegration Services geschrieben haben, müssen Sie die Assembly erstellen, bereitstellen und in SSISSSIS-Designer integrieren, um sie für die Nutzung in Paketen verfügbar zu machen, sie zu testen und zu debuggen.After you have written the code for a custom object for Integration ServicesIntegration Services, you must build the assembly, deploy it, and integrate it into SSISSSIS Designer to make it available for use in packages, and test and debug it.

Schritte zum Erstellen, Bereitstellen und Debuggen eines benutzerdefinierten Objekts für Integration ServicesSteps in Building, Deploying, and Debugging a Custom Object for Integration Services

Sie haben bereits die benutzerdefinierte Funktionalität für das Objekt geschrieben.You have already written the custom functionality for your object. Jetzt müssen Sie es testen und Benutzern zur Verfügung stellen.Now you have to test it and to make it available to users. Die Schritte sind für alle Typen benutzerdefinierter Objekte, die Sie für Integration ServicesIntegration Services erstellen können, ähnlich.The steps are very similar for all the types of custom objects that you can create for Integration ServicesIntegration Services.

Im Folgenden werden die einzelnen Schritte zum Erstellen, Bereitstellen und Testen erläutert.Here are the steps to build, deploy, and test it.

  1. Signieren Sie die zu generierende Assembly mit einem starken Namen.Sign the assembly to be generated with a strong name.

  2. Erstellen Sie die Assembly.Build the assembly.

  3. Stellen Sie die Assembly bereit, indem Sie sie verschieben oder in den entsprechenden Integration ServicesIntegration Services-Ordner kopieren.Deploy the assembly by moving or copying it to the appropriate Integration ServicesIntegration Services folder.

  4. Installieren Sie die Assembly im globalen Assemblycache (Global Assembly Cache, GAC).Install the assembly in the global assembly cache (GAC).

    Das Objekt wird der Toolbox automatisch hinzugefügt.The object is automatically added to the Toolbox.

  5. Beheben Sie ggf. Probleme bei der Bereitstellung.Troubleshoot the deployment, if necessary.

  6. Testen und debuggen Sie den Code.Test and debug your code.

    Sie können den SSIS-Designer in den SQL Server Data Tools (SSDT) jetzt verwenden, um Pakete zu erstellen, zu verwalten und auszuführen, die auf verschiedene SQL ServerSQL Server-Versionen ausgerichtet sind.You can now use SSIS Designer in SQL Server Data Tools (SSDT) to create, maintain, and run packages that target different versions of SQL ServerSQL Server. Weitere Informationen zum Umfang dieser Verbesserung Ihrer benutzerdefinierten Erweiterungen finden Sie unter Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016 (Unterstützung benutzerdefinierter SSIS-Erweiterungen dank der Unterstützung mehrerer Versionen von SSDT 2015 für SQL Server 2016).For more info about the impact of this improvement on your custom extensions, see Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016

Signieren der AssemblySigning the Assembly

Wenn eine Assembly freigegeben werden soll, muss sie im GAC installiert sein.When an assembly is meant to be shared, it must be installed in the global assembly cache. Nachdem die Assembly dem globalen Assemblycache hinzugefügt wurden, kann die Assembly von Anwendungen wie SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT) genutzt werden.After the assembly has been added to the global assembly cache, the assembly can be used by applications such as SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT). Für den globalen Assemblycache muss die Assembly mit einem starken Namen signiert werden, um sicherzustellen, dass eine Assembly global eindeutig ist.A requirement of the global assembly cache is that the assembly must be signed with a strong name, which guarantees that an assembly is globally unique. Eine Assembly mit starkem Namen verfügt über einen vollqualifizierten Namen, der den Namen, öffentlichen Schlüssel und die Versionsnummer der Assembly umfasst.A strong-named assembly has a fully qualified name that includes the name, culture, public key, and version number of the assembly. Anhand dieser Informationen wird die Assembly von der Laufzeit gefunden und von anderen Assemblys mit demselben Namen unterschieden.The runtime uses this information to locate the assembly and to differentiate it from other assemblies with the same name.

Um eine Assembly mit einem starken Namen zu signieren, müssen Sie zuerst über ein Schlüsselpaar verfügen oder eines erstellen, das aus einem öffentlichen und einem privaten Schlüssel besteht.To sign an assembly with a strong name, you must first have or create a public/private key pair. Dieses kryptografische Schlüsselpaar wird während der Erstellung zum Generieren einer Assembly mit starkem Namen verwendet.This public and private cryptographic key pair is used at build time to create a strong-named assembly.

Weitere Informationen zu starken Namen und zu den Schritten zum Signieren einer Assembly finden Sie in den folgenden Themen in der .NET Framework.NET Framework SDK-Dokumentation:For more information about strong names and on the steps that you must followto sign an assembly, see the following topics in the .NET Framework.NET Framework SDK documentation:

  • Assemblys mit starkem NamenStrong-Named Assemblies

  • Erstellen eines SchlüsselpaarsCreating a Key Pair

  • Signieren einer Assembly mit einem starken NamenSigning an Assembly with a Strong Name

    Sie können die Assembly mühelos in Visual StudioVisual Studio beim Erstellen mit einem starken Namen signieren.You can easily sign your assembly with a strong name in Visual StudioVisual Studio at build time. Wählen Sie im Dialogfeld Projekteigenschaften die Registerkarte Signierung aus. Aktivieren Sie die Option Assembly signieren, und geben Sie dann den Pfad der Schlüsseldatei (.snk) an.In the Project Properties dialog box, select the Signing tab. Select the option to Sign the assembly and then provide the path of the key (.snk) file.

Erstellen der AssemblyBuilding the Assembly

Nach der Signierung des Projekts müssen Sie das Projekt oder die Projektmappe erstellen bzw. neu erstellen, indem Sie die im Build-Menü von SQL Server Data ToolsSQL Server Data Tools verfügbaren Befehle verwenden.After signing the project, you must build or rebuild the project or the solution by using the commands available on the Build menu of SQL Server Data ToolsSQL Server Data Tools. Die Lösung enthält möglicherweise ein separates Projekt für eine benutzerdefinierte Benutzeroberfläche, die ebenfalls mit einem starken Namen signiert sein muss und zur gleichen Zeit erstellt werden kann.Your solution may contain a separate project for a custom user interface, which must also be signed with a strong name, and can be built at the same time.

Der einfachste Weg, um die nächsten zwei Schritte (Bereitstellen der Assembly und Installieren im globalen Assemblycache) auszuführen, besteht darin, für diese Schritte als Postbuildereignis in Visual StudioVisual Studio ein Skript zu erstellen.The most convenient method for performing the next two steps—deploying the assembly and installing it in the global assembly cache—is to script these steps as a post-build event in Visual StudioVisual Studio. Buildereignisse stehen unter „Projekteigenschaften“ auf der Seite Kompilieren für ein Visual BasicVisual Basic-Projekt und auf der Seite Buildereignisse für ein C#-Projekt zur Verfügung.Build events are available from the Compile page of Project Properties for a Visual BasicVisual Basic project, and from the Build Events page for a C# project. Der vollständige Pfad ist für Eingabeaufforderungs-Hilfsprogramme wie gacutil.exe erforderlich.The full path is required for command prompt utilities such as gacutil.exe. Pfade mit Leerzeichen und Makros wie $(TargetPath), mit denen Pfade mit Leerzeichen erweitert werden, müssen von Anführungszeichen umschlossen werden.Quotation marks are required both around paths that contain spaces and around macros such as $(TargetPath) that expand to paths that contain spaces.

Nachfolgend finden Sie ein Beispiel einer Postbuildereignis-Befehlszeile für einen benutzerdefinierten Protokollanbieter:Here is an example of a post-build event command line for a custom log provider:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe" -u $(TargetName)  
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe" -i $(TargetFileName)  
copy $(TargetFileName) "C:\Program Files\Microsoft SQL Server\130\DTS\LogProviders "  

Bereitstellen der AssemblyDeploying the Assembly

Der SSISSSIS-Designer sucht die benutzerdefinierten Objekte, die in Paketen verwendet werden können, indem die Dateien in mehreren Ordnern aufgezählt werden, die bei der Installation von SQL ServerSQL Server Integration ServicesIntegration Services erstellt werden.The SSISSSIS Designer locates the custom objects available for use in packages by enumerating the files found in a series of folders that are created when SQL ServerSQL Server Integration ServicesIntegration Services is installed. Wenn die Standardeinstellungen für die SQL ServerSQL Server-Installation verwendet werden, befinden sich die Ordner im Verzeichnis C:\Programme\Microsoft SQL Server\130\DTS.When the default SQL ServerSQL Server installation settings are used, this set of folders is located under C:\Program Files\Microsoft SQL Server\130\DTS. Wenn Sie jedoch für Ihr benutzerdefiniertes Objekt ein Setupprogramm erstellen, sollten Sie den Wert des HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\SSIS\Setup\DtsPath-Registrierungsschlüssels überprüfen, um den Speicherort des Ordners zu überprüfen.However if you create a setup program for your custom object, you should check the value of the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\SSIS\Setup\DtsPath registry key to verify the location of this folder.

Hinweis

Informationen zur Bereitstellung von benutzerdefinierten Komponenten, die mit der Unterstützung mehrerer Versionen in SQL Server Data Tools zusammenarbeiten, finden Sie unter Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016 (Unterstützung benutzerdefinierter SSIS-Erweiterungen dank der Unterstützung mehrerer Versionen von SSDT 2015 für SQL Server 2016).For info about how to deploy custom components to work well with the multi-version support in SQL Server Data Tools, see Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016.

Sie können die Assembly auf zwei Arten im Ordner platzieren:You can put the assembly in the folder in two ways:

  • Verschieben oder kopieren Sie die kompilierte Assembly nach der Erstellung in den entsprechenden Ordner.Move or copy the compiled assembly to the appropriate folder after building it. (Sie können auch einfach den Kopierbefehl in ein Postbuildereignis einschließen.)(For convenience, you can include the copy command in a Post-build Event.)

  • Erstellen Sie die Assembly direkt im entsprechenden Ordner.Build the assembly directly in the appropriate folder.

    Die folgenden Bereitstellungsordner unter C:\Programme\Microsoft SQL Server\130\DTS werden für die unterschiedlichen Typen benutzerdefinierter Objekte verwendet:The following deployment folders under C:\Program Files\Microsoft SQL Server\130\DTS are used for the various types of custom objects:

Benutzerdefiniertes ObjektCustom object BereitstellungsordnerDeployment folder
TaskTask AufgabenTasks
Ziel-Editor für DimensionsverarbeitungConnection manager VerbindungenConnections
ProtokollanbieterLog provider LogProvidersLogProviders
DatenflusskomponenteData flow component PipelineComponentsPipelineComponents

Hinweis

Assemblys werden in diese Ordner kopiert, um die Aufzählung der verfügbaren Tasks, Verbindungs-Manager usw. zu unterstützen.Assemblies are copied to these folders to support the enumeration of available tasks, connection managers, and so on. Sie müssen daher keine Assemblys, die nur die benutzerdefinierte Benutzeroberfläche für benutzerdefinierte Objekte enthalten, in diesen Ordnern bereitstellen.Therefore you do not have to deploy assemblies that contain only the custom user interface for custom objects to these folders.

Installieren der Assembly im globalen AssemblycacheInstalling the Assembly in the Global Assembly Cache

Verwenden Sie das Befehlszeilentool gacutil.exe, oder ziehen Sie die Assemblys in das Verzeichnis %system%\assembly, um die Taskassembly im globalen Assemblycache (GAC) zu installieren.To install the task assembly into the global assembly cache (GAC), use the command line tool gacutil.exe, or drag the assemblies to the %system%\assembly directory. Sie können auch ganz einfach den Aufruf von gacutil.exe in ein Postbuildereignis einschließen.For convenience, you can also include the call to gacutil.exe in a Post-build Event.

Der folgende Befehl installiert eine Komponente namens MyTask.dll in den GAC mithilfe von gacutil.exe.The following command installs a component named MyTask.dll into the GAC by using gacutil.exe.

gacutil /iF MyTask.dll

Sie müssen SSISSSIS Designer nach der Installation einer neuer Version des benutzerdefinierten Objekts schließen und erneut öffnen.You must close and reopen SSISSSIS Designer after you install a new version of your custom object. Wenn Sie frühere Versionen des benutzerdefinierten Objekts im globalen Assemblycache installiert haben, müssen Sie sie vor der Installation der neuen Version entfernen.If you have installed earlier versions of your custom object in the global assembly cache, you must remove them before installing the new version. Führen Sie gacutil.exe aus, und geben Sie den Assemblynamen mit der /u-Option an, um eine Assembly zu deinstallieren.To uninstall an assembly, run gacutil.exe and specify the assembly name with the /u option.

Weitere Informationen zum globalen Assemblycache finden Sie unter Globales Assemblycache-Tool (Gactutil.exe) in den .NET Framework.NET Framework-Tools.For more information about the global assembly cache, see Global Assembly Cache Tool (Gactutil.exe) in the .NET Framework.NET Framework Tools.

Behandeln von Problemen bei der BereitstellungTroubleshooting the Deployment

Wenn das benutzerdefinierte Objekt in der Toolbox oder der Liste verfügbarer Objekte angezeigt wird, Sie es jedoch keinem Paket hinzufügen können, versuchen Sie Folgendes:If your custom object appears in the Toolbox or the list of available objects, but you are not able to add it to a package, try the following:

  1. Suchen Sie im globalen Assemblycache nach mehreren Versionen der Komponente.Look in the global assembly cache for multiple versions of your component. Wenn im globalen Assemblycache mehrere Versionen der Komponente vorliegen, kann der Designer u. U. die Komponente nicht laden.If there are multiple versions of the component in the global assembly cache, the designer may not be able to load your component. Löschen Sie alle Instanzen der Assembly aus dem globalen Assemblycache, und fügen Sie die Assembly wieder hinzu.Delete all instances of the assembly from the global assembly cache, and re-add the assembly.

  2. Stellen Sie sicher, dass nur eine einzelne Instanz der Assembly im Bereitstellungsordner existiert.Make sure that only a single instance of the assembly exists in the deployment folder.

  3. Aktualisieren Sie die Toolbox.Refresh the Toolbox.

  4. Fügen Sie Visual StudioVisual Studio an devenv.exe an, und legen Sie einen Breakpoint fest, um den Initialisierungscode zu durchlaufen und sicherzustellen, dass keine Ausnahmen auftreten.Attach Visual StudioVisual Studio to devenv.exe and set a breakpoint to step through your initialization code to ensure that no exceptions occur.

Testen und Debuggen des CodesTesting and Debugging Your Code

Am einfachsten können Sie die Laufzeitmethoden eines benutzerdefinierten Objekts debuggen, indem Sie nach dem Erstellen des benutzerdefinierten Objekts dtexec.exe von Visual StudioVisual Studio aus starten und ein Paket, das diese Komponente verwendet, ausführen.The simplest approach to debugging the run-time methods of a custom object is to start dtexec.exe from Visual StudioVisual Studio after building your custom object and run a package that uses the component.

Wenn Sie die Entwurfszeitmethoden der Komponente, z.B. die Validate-Methode, debuggen möchten, öffnen Sie ein Paket, das die Komponente in einer zweiten Instanz von Visual StudioVisual Studio verwendet, und hängen Sie es an den devenv.exe-Prozess an.If you want to debug the component's design-time methods, such as the Validate method, open a package that uses the component in a second instance of Visual StudioVisual Studio, and attach to its devenv.exe process.

Wenn Sie auch die Laufzeitmethoden der Komponente debuggen möchten, wenn ein Paket offen ist und in SSISSSIS-Designer ausgeführt wird, müssen Sie die Ausführung des Pakets anhalten, damit Sie auch für den DtsDebugHost.exe-Prozess einen Anfügevorgang durchführen können.If you also want to debug the component's run-time methods when a package is open and running in SSISSSIS designer, you must force a pause in the execution of the package so that you can also attach to the DtsDebugHost.exe process.

So debuggen Sie die Laufzeitmethoden eines Objekts durch das Anfügen an dtexec.exeTo debug an object's run-time methods by attaching to dtexec.exe

  1. Signieren und erstellen Sie Ihr Projekt in der Debug-Konfiguration, stellen Sie es bereit, und installieren Sie es im globalen Assemblycache wie in diesem Thema beschrieben.Sign and build your project in the Debug configuration, deploy it, and install it in the global assembly cache as described in this topic.

  2. Wählen Sie unter Projekteigenschaften auf der Registerkarte Debuggen die Option Externes Programm starten als Startaktion aus, und gehen Sie zu dtexec.exe, standardmäßig unter „C:\Programme\Microsoft SQL Server\130\DTS\Binn“ installiert.On the Debug tab of Project Properties, select Start external program as the Start Action, and locate dtexec.exe, which is installed by default in C:\Program Files\Microsoft SQL Server\130\DTS\Binn.

  3. Geben Sie im Textfeld Befehlszeilenoptionen unter Startoptionen die Befehlszeilenargumente ein, die zum Ausführen eines Pakets erforderlich sind, das die Komponente verwendet.In the Command line options text box, under Start Options, enter the command line arguments required to run a package that uses your component. Oftmals besteht das Befehlszeilenargument aus dem /F[ILE]-Schalter gefolgt vom Pfad und dem Namen der .dtsx-Datei.Often the command-line argument will consist of the /F[ILE] switch followed by the path and file name of the .dtsx file. Weitere Informationen finden Sie unter dtexec Utility.For more information, see dtexec Utility.

  4. Legen Sie sofern erforderlich im Quellcode Breakpoints in den Laufzeitmethoden der Komponente fest.Set breakpoints in the source code where appropriate in the run-time methods of your component.

  5. Führen Sie Ihr Projekt aus.Run your project.

So debuggen Sie die Entwurfszeitmethoden eines benutzerdefinierten Objekts durch das Anfügen zu SQL Server-DatentoolsTo debug a custom object's design-time methods by attaching to SQL Server Data Tools

  1. Signieren und erstellen Sie Ihr Projekt in der Debug-Konfiguration, stellen Sie es bereit, und installieren Sie es im globalen Assemblycache wie in diesem Thema beschrieben.Sign and build your project in the Debug configuration, deploy it, and install it in the global assembly cache as described in this topic.

  2. Legen Sie sofern erforderlich im Quellcode Breakpoints in den Entwurfszeitmethoden des benutzerdefinierten Objekts fest.Set breakpoints in the source code where appropriate in the design-time methods of your custom object.

  3. Öffnen Sie eine zweite Instanz von Visual StudioVisual Studio, und laden Sie ein Integration ServicesIntegration Services-Projekt, das ein Paket enthält, das das benutzerdefinierte Objekt verwendet.Open a second instance of Visual StudioVisual Studio and load an Integration ServicesIntegration Services project that contains a package that uses the custom object.

  4. Führen Sie von der ersten Instanz von Visual StudioVisual Studio einen Anfügevorgang für die zweite Instanz von devenv.exe durch, in der das Paket geladen wird, indem Sie aus dem Menü Debuggen der ersten Instanz die Option An den Prozess anhängen auswählen.From the first instance of Visual StudioVisual Studio, attach to the second instance of devenv.exe in which the package is loaded by selecting Attach to Process from the Debug menu of the first instance.

  5. Führen Sie das Paket aus der zweiten Instanz von Visual StudioVisual Studio aus.Run the package from the second instance of Visual StudioVisual Studio.

So debuggen Sie die Laufzeitmethoden eines benutzerdefinierten Objekts durch das Anfügen zu SQL Server-DatentoolsTo debug a custom object's run-time methods by attaching to SQL Server Data Tools

  1. Wenn Sie die in der vorherigen Prozedur aufgeführten Schritte ausgeführt haben, halten Sie die Ausführung des Pakets an, sodass Sie einen Anfügevorgang für DtsDebugHost.exe durchführen können.After you have completed the steps listed in the previous procedure, force a pause in the execution of your package so that you can attach to DtsDebugHost.exe. Sie können diese Pause erzwingen, indem Sie dem OnPreExecute-Ereignis einen Breakpoint hinzufügen, oder indem Sie dem Projekt einen Skripttask hinzufügen und ein Skript eingeben, das ein modales Meldungsfeld anzeigt.You can force this pause by adding a breakpoint to the OnPreExecute event, or by adding a Script task to your project and entering script that displays a modal message box.

  2. Führen Sie das Paket aus.Run the package. Wechseln Sie nach dem Anhalten des Vorgangs zur Instanz von Visual StudioVisual Studio, in der das Codeprojekt geöffnet ist, und wählen Sie aus dem Menü Debuggen die Option An den Prozess anhängen aus.When the pause occurs, switch to the instance of Visual StudioVisual Studio in which your code project is open, and select Attach to Process from the Debug menu. Stellen Sie sicher, dass Sie an die Instanz von DtsDebugHost.exe anfügen, die in der Spalte Typ als Verwaltet, x86 aufgeführt wird, und nicht an die nur als x86 aufgeführte Instanz.Make sure to attach to the instance of DtsDebugHost.exe listed as Managed, x86 in the Type column, not to the instance listed as x86 only.

  3. Kehren Sie zum angehaltenen Paket zurück, und setzen Sie den Vorgang über den Breakpoint hinaus fort, oder klicken Sie auf OK, um das Meldungsfeld, das vom Skripttask aufgerufen wird, zu verwenden, und setzen Sie die Paketausführung und den Debugvorgang fort.Return to the paused package and continue past the breakpoint, or click OK to dismiss the message box raised by the Script task, and continue package execution and debugging.

Weitere Informationen finden Sie unterSee Also

Entwickeln benutzerdefinierter Objekte für Integration Services Developing Custom Objects for Integration Services
Beibehalten von benutzerdefinierten Objekten Persisting Custom Objects
Tools zur Problembehandlung für die PaketentwicklungTroubleshooting Tools for Package Development