vs2015 c# selenium + .net framework4.5 编写了一个自动开启网页并截屏的winform app, 本地win8.1+另一台win7上跑均无问题, 但部署到两台客户机win server 2012(framework4.5)上均起不来, 报错:
CLR20r3 具体异常是System.IO.FileNotFoundException
应该是目标机环境或配置问题, 网查后装了vc_redist.x64.exe无效, 加装了.net framework4.72(但客户机不敢重启)无效.
分析: 到底是哪个文件不存在呢? app增加全局异常捕获后, 得到异常信息:
未能加载文件或程序集“netstandard, Version=2.0.0.0, Culture=neutral, ,PublicKeyToken=cc7b13ffcd2ddd51’ or one of its dependencies. The system cannot find the file specified."
网查后, 在 .net framework项目的工程文件(csproj)中加入配置:
<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
无效.
是否目标机上却少netstandard文件呢? 在开发本机上的 Windows\Microsoft.NET 目录下搜netstandard果然找到找到文件netstandard.dll在目录 v4.0_2.0.0.0__cc7b13ffcd2ddd51下, cc7b13ffcd2ddd51…这不正是报错中的KeyTocken嘛?!小欣喜. 将此文件复制到目标机app目录下, 果然程序能启动了, 重大进展!
但运行中, 开启浏览器时还有报错:
找不到方法:'System.String System.String.Format(System.IFormatProvider,System.String,System.Object)
网查还是.net framework版本问题. 改用.net framework4.61, 4.72重新编译均无效, 或改报错为:
找不到方法:"!!0[] System.Array.Empty()"
考虑到编程时曾数次改过app的.net framework编译版本, vs2015也警告说NuGet下来的selenium包版本可能与当前framework版本不兼容. 索性:
老老实实用.net framework4.51(与目标机相同)新建项目, 重新NuGet selenium包, 把原来版本下的代码复制过来, 重新生成exe文件. 部署到目标机上, 成功!