在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
答案 0 :(得分:4)
格式错误'尝试加载非.NET程序集(例如本机代码DLL)时,通常会发生错误,就好像它是.NET程序集,或者是为不同平台(例如32位对64位)编译的二进制文件。使用ILSpy(对于托管程序集)或Dependency Walker(对于本机DLL)等工具来验证二进制文件的属性是否与进程的属性相匹配。由于看起来第三方程序集(GhostscriptSharp)正在尝试加载,因此可能需要反映该程序集以确定错误所针对的文件。
答案 1 :(得分:1)
如果抛出异常并显示消息“尝试加载格式不正确的程序”,则可能是由于64位服务器上运行的32位文件gsdll32.dll
。在iis中,必须为运行应用程序的应用程序池将“启用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,这将成功。