我有一系列由TFS代理运行的PowerShell脚本是构建过程的一部分。它们在几个服务器(Windows Server 2012 R2)上运行,publish a series of DACPAC's到一组给定的数据库。最近我将所有TFS构建代理更新到最新版本(TFS 2018)
今天我注意到我的构建过程中的其中一个服务器不再运行,特别是由于“System.StackOverflowException”错误而无法运行“SqlPackage.exe”(因此非常适合此站点)。
通过手动运行power shell脚本可以重现同样的问题,但只有在这一台服务器上运行,所有其他服务器运行时都没有问题。脚本如下所示:
$arguements = '/a:Publish /pr:"' + $scriptPath + $database + ".publish.xml" + '" /sf:"' + $dacPac + '" /tcs:"Data Source=' + $servername + ';Persist Security Info=True;User ID=' + $username + ';Password=' + $password + ';Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True"'
Start-Process -FilePath "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130\SqlPackage.exe" -ArgumentList $arguements -NoNewWindow -PassThru -Wait
手动运行时,调试异常为:
类型'System.StackOverflowException'的未处理异常 发生在Microsoft.SqlServer.TransactSql.ScriptDom.dll
中
我真的不确定此服务器上的哪种配置会导致此类问题。资源方面,服务器非常强大,有大量可用内存,其他服务器运行得很好。我已经尝试了各种版本的“SqlPackage”(13,14),但似乎没有任何影响。我已经换掉了DacPac,但这似乎也不起作用......
以前有人见过这个问题吗?什么样的服务器配置会导致这类问题?
嗯,只需切换到新的“14.0”,“SqlPackage.exe”,现在我在所有机器上都可以使用它,我想知道它是否与任何相关的dll有关,例如我在{{{ 3}}
实际上现在我想到这个,我认为这个问题是在我第一次安装VS 2017时在服务器上启动的,我想知道这对“SqlPackage.exe”有什么影响吗?
我也发现了这个SSDT,我想知道我是否可以这样解决...
答案 0 :(得分:0)
我从不知道如何解决“ SqlPackage”问题,我们最终创建了自己的程序包部署程序控制台应用程序,并通过控制台应用程序(“ DacpacDeployUtility”)进行调用:
$DacPacDeployerPath = """" + $scriptPath + "..\..\..\DacpacDeployUtility\bin\release\EBMDacpacDeployUtility.exe"""
$Output = Start-Process -FilePath $DacPacDeployerPath -ArgumentList $arguements -NoNewWindow -PassThru -Wait
然后在PowerShell脚本中调用它:
{{1}}