Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server Integration Services(SQL Server 2016)(SSIS)是否每次重新编译C代码';是运行,还是缓存?_C#_Sql Server_Ssis - Fatal编程技术网

C# SQL Server Integration Services(SQL Server 2016)(SSIS)是否每次重新编译C代码';是运行,还是缓存?

C# SQL Server Integration Services(SQL Server 2016)(SSIS)是否每次重新编译C代码';是运行,还是缓存?,c#,sql-server,ssis,C#,Sql Server,Ssis,最近我遇到了一个奇怪的问题,一些变量在DTSX包中的C#任务中被错误分配,但在SQL Server 2012上安装的SSI中没有导致错误,但在SQL Server 2016上确实出现了错误 基本上,错误如下所示: Variables.ContainerDisable100 = C100; Variables.ContainerDisable101 = C101; Variables.ContainerDisable102 = C102; Variables.Con

最近我遇到了一个奇怪的问题,一些变量在DTSX包中的C#任务中被错误分配,但在SQL Server 2012上安装的SSI中没有导致错误,但在SQL Server 2016上确实出现了错误

基本上,错误如下所示:

    Variables.ContainerDisable100 = C100;
    Variables.ContainerDisable101 = C101;
    Variables.ContainerDisable102 = C102;
    Variables.ContainerDisable102 = C103;
如您所见,Variables.ContainerDisable102应该是Variables.ContainerDisable103。这将导致一个错误,当dtsx包运行时,该错误将进一步影响dtsx包的执行。但是,这并没有在我们使用SQL Server 2012时在本地环境中造成问题,但是在SQL Server 2016上,这导致了预期的错误

我的理论是,有人使用记事本++而不是数据工具更新了这个dtsx包中的C代码。这意味着C#代码没有重新编译,当SQLServer2012运行编译后的代码时,它工作正常

这就引出了我的问题,SQL Server 2016 SSI仍然关注已编译的代码还是未编译的C#代码

这是一个非常奇怪的问题,这是我唯一的预感。当我在data tools中手动打开C#任务时,做了一个小的更改,构建并保存了它,然后在SQL Server 2012中出现了错误,这让我相信它以前没有正确构建,或者是通过XML更新的

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

    Variables.ContainerDisable100 = C100;
    Variables.ContainerDisable101 = C101;
    Variables.ContainerDisable102 = C102;
    Variables.ContainerDisable102 = C103;
  • SQL Server 2016
  • SQL Server集成服务13.0

当我用notepad++更新dtsx,只更新C#代码并使用SQL Server作业代理运行包时,它失败了。不应该是这种情况,因为它应该查看预编译的二进制文件。我在微软的“新内容”页面上看不到任何与此相关的内容。

这是一个大海捞针的问题,但我已经追根究底了

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

我的本地安装正在使用

  • SQL Server 2012
  • SQL Server集成服务11.0
但是,当客户尝试执行这些包时,他们收到了错误。设置如下:

    Variables.ContainerDisable100 = C100;
    Variables.ContainerDisable101 = C101;
    Variables.ContainerDisable102 = C102;
    Variables.ContainerDisable102 = C103;
  • SQL Server 2016
  • SQL Server集成服务13.0
他们正在运行的包是在SQL Server Data Tools 2010中开发的,目标版本为SQL Server 2012。它们未更新为与SQL Server 2016一起运行

当执行这些包时,它足够聪明,可以看到版本不匹配,它会临时升级包以运行它。当它升级软件包时,会重新编译C代码,这反过来会导致错误

我相信在C#script任务的构建过程中出现了问题,或者开发人员通过dtsx XML手动更新了C#代码,这意味着预编译的C#从未重新编译过,这导致了这个问题

我希望这有助于其他人在将来避免这个问题