【问题标题】:Assembly redirect not working for SSIS script task程序集重定向不适用于 SSIS 脚本任务
【发布时间】:2018-05-03 15:00:30
【问题描述】:

我们要求某些 SSIS 包需要在多个 SQL Server 版本(2014 和 2016)上运行,而我们无需维护 2 个版本的代码库。

我已经构建了一个包装 C# 控制台应用程序,该应用程序在配置中具有程序集重定向(如下所列),然后它调用 Package.Execute 方法来执行 DTSX 文件。

我收到以下错误,告诉我机器上找到的最新版本的 Microsoft.SqlServer.ScriptTask 程序集正在加载。该机器目前有 v12、13 和 14 组件。而且我需要使用 v13,因为我的目标是 SQL Server 2016。

任何想法为什么会这样做以及我如何正确“解决”它?

错误

CS1705 - 程序集 'Microsoft.SqlServer.ScriptTask, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' 使用 'Microsoft.SqlServer.ManagedDTS, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'具有比引用程序集更高的版本 'Microsoft.SqlServer.ManagedDTS, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'

控制台应用配置中的重定向

<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>

【问题讨论】:

  • 您必须检查不同的 ManagedDTS 程序集对象和类之间是否存在主要差异。如果发现这些差异,我认为您必须同意所提供的答案。否则,您可以回答您提出的问题

标签: sql-server ssis script-task assembly-binding-redirect ssis-2016


【解决方案1】:

您不能使为特定 SQL Server 版本设计的包使用不同版本的 DLL 运行。当软件包升级到更高版本时也是如此。你不能在较低版本中执行它。

程序集绑定重定向不适用于类似情况。因为版本之间的类和对象不同。

【讨论】:

  • 好吧,我知道一个包一旦升级就不能降级回来。我们正在考虑可以动态进行升级而无需维护同一个包的 2 个版本。
  • @Ash 我认为你的工作很有趣,我会等待结果,希望你能找到一个好的解决方案。祝你好运
【解决方案2】:

对于 SQL Server 2016,您必须至少将 Microsoft.SqlServer.ManagedDTSnewversion 属性更改为 14.0.0.0(还可能更改为其他 newversion 属性)

<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>

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 2019-08-12
    • 2011-01-05
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多