服务结构升级在 VSTS 构建服务器上创建了一个错误

Posted

技术标签:

【中文标题】服务结构升级在 VSTS 构建服务器上创建了一个错误【英文标题】:Service fabric upgrade created a error on VSTS build server 【发布时间】:2017-11-24 00:05:43 【问题描述】:

我们已将 Service Fabric SDK 和工具从 2.5.216 升级到 2.6.210。

现在,当我们在 VSTS 托管代理上运行构建时,构建在验收测试阶段失败,该阶段通过 vstest.exe 运行规范流验收测试。

错误是:

无法从程序集“Microsoft.ServiceFabric.Data.Interfaces,版本=5.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”中加载类型“Microsoft.ServiceFabric.Data.Collections.IReliableConcurrentQueue`1”。","exceptionType ":"System.TypeLoadException"

使用相同的 vstest.exe 命令在本地进行测试(安装了 Microsoft Azure Service Fabric SDK 和 Tools 2.6.210 (VS2015))。

查看了托管代理的规范 (https://www.visualstudio.com/en-us/docs/build/concepts/agents/hosted) 我们注意到代理上安装的版本是 Service Fabric 5.4.164.9494 / Service Fabric SDK 2.4.164,并且怀疑这些 需要更新。

较长版本的错误

2017-06-20T15:11:00.0331094Z 失败 我可以请求更改 游戏类型2017-06-20T15:11:00.0331094Z的分配

[error]错误消息:2017-06-20T15:11:00.0341044Z ##[error] System.Exception:不匹配的响应代码:InternalServerError -

"message":"发生错误。","exceptionMessage":"无法加载 类型 'Microsoft.ServiceFabric.Data.Collections.IReliableConcurrentQueue1' from assembly 'Microsoft.ServiceFabric.Data.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.","exceptionType":"System.TypeLoadException","stackTrace":" at Infrastructure.ExceptionHandling.ExceptionHelper.ThrowIfUnhandled() in d:\\a\\1\\s\\Infrastructure\\Infrastructure.ExceptionHandling\\ExceptionHelper.cs:line 45\r\n at xwx.WebApi.Controllers.gameTypesController.<UpdategameType>d__8.MoveNext() in d:\\a\\1\\s\\Orchestration\\xwx\\xwx.WebApi\\Controllers\\gameTypesController.cs:line 142\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__31.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.AuthorizationFilterAttribute.d__2.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()" 2017-06-20T15:11:00.0341044Z ##[错误]堆栈跟踪: 2017-06-20T15:11:00.0341044Z ##[错误] 在 Infrastructure.TestHelpers.AcceptanceTests.ResponseHelper.AssertResponseHadExpectedStatusCode(Int32 预期状态代码)在 d:\a\1\s\Infrastructure\Infrastructure.TestHelpers\AcceptanceTests\ResponseHelper.cs:line 25 2017-06-20T15:11:00.0341044Z ##[错误] 在 xwx.AcceptanceTests.ResponseSteps.ThenIShouldReceiveAHttpStatusCode(Int32 预期状态代码)在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\ResponseSteps.cs:line 12 2017-06-20T15:11:00.0341044Z ##[错误] 在 TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding 绑定,IContextManager contextManager,Object[] 参数, ITestTracer testTracer,时间跨度和持续时间) 2017-06-20T15:11:00.0351049Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch 匹配,对象 [] 参数)2017-06-20T15:11:00.0351049Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance) 2017-06-20T15:11:00.0351049Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() 2017-06-20T15:11:00.0351049Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.ScenarioCleanup() 2017-06-20T15:11:00.0351049Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.ICanMakeARequestToChangeTheAllocationOfAgameType() 在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\gameTypes\ChangeAllocation.feature:line 43错误消息:2017-06-20T15:11:00.0351049Z ##[错误] System.Exception:不匹配的响应代码:NoContent - 2017-06-20T15:11:00.0351049Z ##[错误]堆栈跟踪: 2017-06-20T15:11:00.0351049Z ##[错误] 在 Infrastructure.TestHelpers.AcceptanceTests.ResponseHelper.AssertResponseHadExpectedStatusCode(Int32 预期状态代码)在 d:\a\1\s\Infrastructure\Infrastructure.TestHelpers\AcceptanceTests\ResponseHelper.cs:line 25 2017-06-20T15:11:00.0351049Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.gameTypesSteps.WhenTheChangeHasCompleted() 在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\gameTypes\gameTypesSteps.cs:line 167 2017-06-20T15:11:00.0351049Z ##[错误] 在 TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding 绑定,IContextManager contextManager,Object[] 参数, ITestTracer testTracer,时间跨度和持续时间) 2017-06-20T15:11:00.0351049Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch 匹配,对象 [] 参数)2017-06-20T15:11:00.0351049Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance) 2017-06-20T15:11:00.0351049Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() 2017-06-20T15:11:00.0351049Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.ScenarioCleanup() 2017-06-20T15:11:00.0361050Z 2017-06-20T15:11:00.0361050Z 失败我 可以增加分配 2017-06-20T15:11:00.0361050Z 2017-06-20T15:11:01.5390956Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.ICanIncreaseTheAllocation() 在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\gameTypes\ChangeAllocation.feature:line 52错误消息:2017-06-20T15:11:01.5400956Z ##[错误] System.Exception:不匹配的响应代码:NoContent - 2017-06-20T15:11:01.5400956Z ##[错误]堆栈跟踪: 2017-06-20T15:11:01.5400956Z ##[错误] 在 Infrastructure.TestHelpers.AcceptanceTests.ResponseHelper.AssertResponseHadExpectedStatusCode(Int32 预期状态代码)在 d:\a\1\s\Infrastructure\Infrastructure.TestHelpers\AcceptanceTests\ResponseHelper.cs:line 25 2017-06-20T15:11:01.5400956Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.gameTypesSteps.WhenTheChangeHasCompleted() 在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\gameTypes\gameTypesSteps.cs:line 167 2017-06-20T15:11:01.5400956Z ##[错误] 在 TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding 绑定,IContextManager contextManager,Object[] 参数, ITestTracer testTracer,时间跨度和持续时间) 2017-06-20T15:11:01.5400956Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch 匹配,对象 [] 参数)2017-06-20T15:11:01.5400956Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance) 2017-06-20T15:11:01.5400956Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() 2017-06-20T15:11:01.5400956Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.ScenarioCleanup() 2017-06-20T15:11:01.5400956Z 如果我尝试减少 分配低于可用的游戏数量我只能减少 分配到总可用 2017-06-20T15:11:01.5400956Z 2017-06-20T15:11:03.0426998Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.IfITryToReduceTheAllocationBelowTheNumberOfgamesAvailableICanOnlyReduceTheAllocationToTheTotalAvailable() 在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\gameTypes\ChangeAllocation.feature:line 70 错误消息:2017-06-20T15:11:03.0426998Z ##[错误] System.Exception:不匹配的响应代码:NoContent - 2017-06-20T15:11:03.0426998Z ##[错误]堆栈跟踪: 2017-06-20T15:11:03.0426998Z ##[错误] 在 Infrastructure.TestHelpers.AcceptanceTests.ResponseHelper.AssertResponseHadExpectedStatusCode(Int32 预期状态代码)在 d:\a\1\s\Infrastructure\Infrastructure.TestHelpers\AcceptanceTests\ResponseHelper.cs:line 25 2017-06-20T15:11:03.0437002Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.gameTypesSteps.WhenTheChangeHasCompleted() 在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\gameTypes\gameTypesSteps.cs:line 167 2017-06-20T15:11:03.0437002Z ##[错误] 在 TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding 绑定,IContextManager contextManager,Object[] 参数, ITestTracer testTracer,时间跨度和持续时间) 2017-06-20T15:11:03.0437002Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch 匹配,对象 [] 参数)2017-06-20T15:11:03.0437002Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance) 2017-06-20T15:11:03.0437002Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() 2017-06-20T15:11:03.0437002Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.ScenarioCleanup() 2017-06-20T15:11:03.0437002Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.ICanReduceTheAllocationByTheNumberOfgamesStillAvailable() 在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\gameTypes\ChangeAllocation.feature:line 61错误消息:2017-06-20T15:11:03.0437002Z ##[错误] System.Exception:不匹配的响应代码:NoContent - 2017-06-20T15:11:03.0437002Z ##[错误]堆栈跟踪: 2017-06-20T15:11:03.0437002Z ##[错误] 在 Infrastructure.TestHelpers.AcceptanceTests.ResponseHelper.AssertResponseHadExpectedStatusCode(Int32 预期状态代码)在 d:\a\1\s\Infrastructure\Infrastructure.TestHelpers\AcceptanceTests\ResponseHelper.cs:line 25 2017-06-20T15:11:03.0437002Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.gameTypesSteps.WhenTheChangeHasCompleted() 在 d:\a\1\s\Tests\Orchestration\xwx\xwx.AcceptanceTests\gameTypes\gameTypesSteps.cs:line 167 2017-06-20T15:11:03.0437002Z ##[错误] 在 TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding 绑定,IContextManager contextManager,Object[] 参数, ITestTracer testTracer,时间跨度和持续时间) 2017-06-20T15:11:03.0437002Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch 匹配,对象 [] 参数)2017-06-20T15:11:03.0437002Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance) 2017-06-20T15:11:03.0437002Z ##[错误] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() 2017-06-20T15:11:03.0437002Z ##[错误] 在 xwx.AcceptanceTests.gameTypes.ChangeAllocation3532Feature.ScenarioCleanup() 2017-06-20T15:11:03.0437002Z 失败我可以减少分配 仍然可用的游戏数量 2017-06-20T15:11:03.0437002Z

【问题讨论】:

Andreas 我们很乐意收到您对此问题的反馈。 VS2017 托管代理安装了兼容的 SDK/运行时。另一种选择是带上你自己的代理。 详细的构建日志是什么?您能否分享一个可以在 OneDrive 上重现此问题的简单示例? ok 更新了帖子。添加了详细的日志。 【参考方案1】:

即使您在构建服务器上指定平台目标 x64,请检查您的项目构建配置以查看发布是否设置为平台目标 x64。

还要确保生成服务器安装了最新的 Service Fabric SDK。有问题的构建可能是从 GAC 获取旧程序集。

这是我得到的错误,

System.TypeLoadException: Could not load type 'Microsoft.ServiceFabric.Data.IReliableStateManagerReplica2' from assembly 'Microsoft.ServiceFabric.Data.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

【讨论】:

【参考方案2】:

您可以通过安装Microsoft.ServiceFabric.Services 包来使用SDK only。使用托管代理对我来说效果很好。

【讨论】:

现在不知道如何在 VSTS 中看到它是基于云的解决方案。***.com/questions/44755900/… 我会按照我的理解运行它 Install-Package Microsoft.ServiceFabric.Services -Version 2.6.210 此页面指向已安装的组件。 visualstudio.com/en-us/docs/build/concepts/agents/hosted 安装的是Service Fabric 5.4.164.9494 Service Fabric SDK 2.4.164 "您只能通过安装 Microsoft.ServiceFabric.Services 包来使用 SDK。使用托管代理对我来说效果很好。"我该怎么做?与 packages.config 中一样,有必要的参考。如果可以,我应该在服务器上运行 exe 吗? 这是要运行的 powershel 吗? Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force -Scope CurrentUser $down = New-Object System.Net.WebClient $url = 'microsoft.com/web/handlers/…'; $file = 'MicrosoftAzure-ServiceFabric-CoreSDK.exe'; $down.DownloadFile($url,$file); $exec = New-Object -com shell.application $exec.shellexecute($file);

以上是关于服务结构升级在 VSTS 构建服务器上创建了一个错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Cloud 服务帐户是 VSTS 构建

在VSTS中缓存npm install任务

如何从 VSTS 发布管道部署服务结构应用程序?

升级后 Azure 服务结构持续部署和回滚选项

使用 vsts 访问被拒绝错误

VSTS Online - 将文件从AGENT MACHINE复制到VSTS