TeamCity:GhostscriptSharp:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)

时间:2016-02-01 12:57:49

标签: c# continuous-integration teamcity badimageformatexception ghostscriptsharp

在CI上运行测试时,PDF转换失败。我正在使用GhostscriptsSharp库进行转换。

我在本地运行测试时没有遇到此问题,PDF文件正确转换为图像。

我一直在互联网上寻找解决方案,但到目前为止,我找到的所有东西都没有帮助我找到解决方案。

  

尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)

     

System.BadImageFormatException:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)   在GhostscriptSharp.GhostscriptWrapper.CreateAPIInstance(IntPtr& pinstance,IntPtr caller_handle)   在GhostscriptSharp.GhostscriptWrapper.CallAPI(String [] args)      at GhostscriptSharp.GhostscriptWrapper.GeneratePageThumbs(String inputPath,String outputPath,Int32 firstPage,Int32 lastPage,Int32 width,Int32 height)      在Framework:.Utils.FileUtils.ConvertPdfToImages(String pdfPath,String imagesPath,Int32 pageCount)中的c:\ TeamCity \ buildAgent \ work \ 8e7aa88e702dfaf7 \ Framework \ Utils \ FileUtils.cs:第90行      在C:\ TeamCity \ buildAgent \ work \ 8e7aa88e702dfaf7 \ StepDefinitions \ General \ Search \ SearchTableSteps.cs中的StepDefinitions.General.Search.SearchTableSteps.ThenImagesAreCorrectInDownloadedDocumentFromSearchGrid(表格表)中:第282行      在TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding,IContextManager contextManager,Object []参数,ITestTracer testTracer,TimeSpan& duration)      在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch match,Object []参数)      在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance)      在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep()      位于c:\ TeamCity \ buildAgent \ work \ 8e7aa88e702dfaf7 \ Features \ Clerk \ version_2 \ ClerkQuickDoc.feature.cs中的Features.Clerk.Version_2.Clerk_QuickDocFeature.ScenarioCleanup():第0行      位于c:\ TeamCity \ buildAgent \ work \ 8e7aa88e702dfaf7 \ Features \ Clerk \ version_2 \ ClerkQuickDoc.feature:28行的Features.Clerk.Version_2.Clerk_QuickDocFeature.Clerk_DownloadRedactedDocument()      at TechTalk.SpecRun.Framework.TaskExecutors.StaticOrInstanceMethodExecutor.ExecuteInternal(ITestThreadExecutionContext testThreadExecutionContext)在c:\ TeamCity \ buildAgent \ work \ 1ace6ed01d0a43bb \ TechTalk.SpecRun.Framework.Interfaces \ TaskExecutors \ StaticOrInstanceMethodExecutor.cs:第40行      at TechTalk.SpecRun.Framework.TestAssemblyExecutor.ExecuteTestNodeTask(TestNode testNode,ITaskExecutor task,TraceEventType eventType)in c:\ TeamCity \ buildAgent \ work \ 1ace6ed01d0a43bb \ TechTalk.SpecRun.Framework.Executor \ TestAssemblyExecutor.cs:line 215

4 个答案:

答案 0 :(得分:4)

格式错误'尝试加载非.NET程序集(例如本机代码DLL)时,通常会发生错误,就好像它是.NET程序集,或者是为不同平台(例如32位对64位)编译的二进制文件。使用ILSpy(对于托管程序集)或Dependency Walker(对于本机DLL)等工具来验证二进制文件的属性是否与进程的属性相匹配。由于看起来第三方程序集(GhostscriptSharp)正在尝试加载,因此可能需要反映该程序集以确定错误所针对的文件。

答案 1 :(得分:1)

如果抛出异常并显示消息“尝试加载格式不正确的程序”,则可能是由于64位服务器上运行的32位文件gsdll32.dll。在中,必须为运行应用程序的应用程序池将“启用32位应用程序”设置为True。在进行此更改后回收应用程序池。

派生自this answer

答案 2 :(得分:0)

我在Visual Studio 2013中的项目中通过选中Project-> Properties-> Build Platform目标解决了同样的问题:首选32位(如果平台目标设置为任何CPU)

答案 3 :(得分:0)

在xunit的团队城市构建步骤下,在高级选项下,有一个.NET运行时,带有平台下拉列表(通常是隐藏的)。默认为运行xunit.console.exe 64位的任何CPU / MSIL。如果您将其更改为x86,它将使用xunit.console.x86.exe,这将成功。