SQL Server Integration Services (SQL Server 2016) (SSIS) 是在每次运行时重新编译 C# 代码,还是对其进行缓存?



最近,我遇到了一个奇怪的问题,在DTSX软件包中的C#任务中,某些变量被错误地分配了,但在SQL Server上安装了SSIS中的SSIS错误,但确实发生了错误,但确实发生了错误在SQL Server 2016上。

本质上是错误如下:

    Variables.ContainerDisable100 = C100;
    Variables.ContainerDisable101 = C101;
    Variables.ContainerDisable102 = C102;
    Variables.ContainerDisable102 = C103;

您可以看到变量。ContainerDisable102应该是变量。ContainerDisable103。这将导致错误进一步导致DTSX软件包的执行。但是,这在我们使用SQL Server 2012时并没有在本地环境上引起问题,但是在SQL Server 2016上,这会导致预期错误。

我的理论是,有人使用记事本 而不是数据工具在此DTSX软件包中更新了C#代码。这意味着C#代码没有重新编译,SQL Server 2012运行了编译代码时,它运行良好。

这引起我的问题,SQL Server 2016 SSIS是否仍然查看编译的代码,还是查看未编译的C#代码?

这是一个非常奇怪的问题,这是我唯一的预感。当我在数据工具中手动打开C#任务时,进行了少量更改并构建并保存了错误,然后在SQL Server 2012中发生了错误,这使我相信它以前没有正确构建或通过XML更新。h1> 更新

因此,我已经确认客户安装正在运行C#代码,而不是预编译的二进制文件。设置如下:

  • SQL Server 2016
  • SQL Server Integration Services 13.0

当我使用记事本 更新DTSX时,仅更新C#代码并使用SQL Server作业代理运行软件包。不应该这样,因为它应该查看预编译的二进制文件。我在Microsofts中什么都看不到任何新页面。

这是干草堆问题的针头

我上面提到的软件包中有一个错误,但是,该错误没有被编译并存储在DTSX中,这意味着在本地运行时,我没有收到错误。

我的本地安装使用

  • SQL Server 2012
  • SQL Server集成服务11.0

但是,当客户尝试执行这些软件包时,他们会收到错误。设置如下:

  • SQL Server 2016
  • SQL Server Integration Services 13.0

使用SQL Server 2012的目标版本在SQL Server Data Tools 2010中开发了他们正在运行的软件包。它们未更新以使用SQL Server 2016进行运行。

执行这些软件包时,dtexec实用程序足够聪明,可以看到版本不匹配,并暂时升级该软件包以运行它。升级程序包时,它会重新编译C#代码,从而导致错误。

我相信在构建C脚本任务期间存在问题,或者开发人员通过DTSX XML手动更新了C#代码,这意味着从未重新编译预编译的C#,这导致了此问题。/p>

我希望这可以帮助其他人避免将来避免这个问题。

相关内容

最新更新