3

Wir müssen einige SSIS-Pakete mit mehreren SQL Server-Versionen (2014 und 2016) ausführen, ohne dass wir 2 Versionen der Codebasis verwalten müssen.Assembly-Umleitung funktioniert nicht für SSIS-Skripttask

Ich habe eine Wrapper-C# -Konsolen-App mit Assembly-Umleitungen (unten aufgeführt) in der Konfiguration erstellt und ruft später die Package.Execute-Methode zum Ausführen der DTSX-Datei auf.

Ich erhalte den folgenden Fehler, der mir sagt, dass die neueste Version der Microsoft.SqlServer.ScriptTask-Assembly, die auf dem Computer gefunden wird, geladen wird. Die Maschine hat momentan v12, 13 und 14 Baugruppen. Und ich muss v13 verwenden, da ich SQL Server 2016 targetiere.

Irgendwelche Ideen, warum es das tun würde und wie ich es richtig "auflösen" kann?

Fehler:

CS1705 - Assembly 'Microsoft.SqlServer.ScriptTask, Version = 14.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91' Anwendungen ‚Microsoft.SqlServer.ManagedDTS, Version = 14.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91' , die eine höhere Version als referenzierte Assembly hat 'Microsoft.SqlServer.ManagedDTS, Version = 13.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91'

Redirects in Konsole app Config: mit einer anderen Version DLL laufen

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.SqlServer.ScriptTask" publicKeyToken="89845dcd8080cc91" culture="neutral" /> 
     <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.SqlServer.ManagedDTS" publicKeyToken="89845dcd8080cc91" culture="neutral" /> 
     <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.SqlServer.DTSRuntimeWrap" publicKeyToken="89845dcd8080cc91" culture="neutral" /> 
     <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.SqlServer.DTSPipelineWrap" publicKeyToken="89845dcd8080cc91" culture="neutral" /> 
     <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.SqlServer.PipelineHost" publicKeyToken="89845dcd8080cc91" culture="neutral" /> 
     <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> </runtime> 
+0

Sie überprüfen, ob es wesentliche Unterschiede zwischen verschiedene ManagedDTS-Assembly-Objekte und -Klassen. Wenn diese Unterschiede gefunden werden, denke ich, dass Sie der gegebenen Antwort zustimmen müssen. Sonst kannst du mit der Frage gehen, die du gestellt hast – Yahfoufi

Antwort

0

Sie können kein Paket für bestimmte SQL Server-Version gestalten. Auch wenn ein Paket auf eine höhere Version aktualisiert wird. Sie können es nicht in einer niedrigeren Version ausführen.

Montage Binding Redirect ist nicht für einen ähnlichen Fall gemacht. Weil die Klassen und Objekte zwischen den Versionen unterschiedlich sind.

+1

Nun, ich weiß, dass ein Paket, das einmal aktualisiert wurde, nicht zurückdegradiert werden kann. Wir denken über die Grenzen nach, in denen die Aktualisierung dynamisch erfolgen kann, ohne dass zwei Versionen desselben Pakets gewartet werden müssen. – Ash

+0

@Ash Ich denke, dass das, woran Sie arbeiten, sehr interessant ist, ich werde auf die Ergebnisse warten und hoffe, dass Sie eine gute Lösung finden werden. Viel Glück – Hadi

0

Sie haben zumindest die newversion Eigenschaft Microsoft.SqlServer.ManagedDTS-14.0.0.0 für SQL Server 2016 (und möglicherweise auf die anderen newversion Attribute als auch) zu ändern

<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.ScriptTask" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.ManagedDTS" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="14.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.DTSRuntimeWrap" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.DTSPipelineWrap" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.PipelineHost" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="10.0.0.0-14.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>

Verwandte Themen