89.0版Selenium MSEdgeDriver NuGet包缺失Linux二进制致构建失败
修复方案
方案1:升级MSEdgeDriver NuGet包到支持Linux的版本
Selenium.WebDriver.MSEdgeDriver从90.0.818.38版本开始才正式在包内打包linux64目录的对应驱动文件,没有固定Edge大版本强需求的话,这是最省心的处理方式。- 操作:直接修改项目
.csproj文件中的包引用,将版本从89.0.774.54调整为90.0.818.38及以上正式版,执行dotnet restore还原依赖即可,无需额外配置。 - 注意:升级后需保证Linux容器内安装的Edge浏览器版本,与驱动版本大版本一致,避免出现版本不兼容的报错。
方案2:必须固定89版本驱动时,手动补充Linux适配文件
如果项目受限于Edge浏览器版本要求,不能升级驱动包版本,按以下步骤操作:
- 准备与
89.0.774.54版本完全匹配的Linux x64架构msedgedriver可执行文件,确保和容器内Edge浏览器版本一致。 - 二选一实现驱动定位:
- 不依赖NuGet包的自动搜索逻辑:在项目根目录新建
driver/linux64目录,放入准备好的msedgedriver并赋予可执行权限,代码初始化Edge驱动时手动指定路径:var edgeOptions = new EdgeOptions(); // Linux环境下指向自定义的驱动路径,Windows/macOS环境走默认逻辑 var driverPath = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? Path.Combine(AppContext.BaseDirectory, "driver/linux64") : null; var driver = new EdgeDriver(driverPath, edgeOptions); - 无需修改业务代码:将补驱动的逻辑写入Dockerfile构建流程,在依赖还原后、正式构建前,手动创建缺失的目录结构并放入驱动:
# 示例Dockerfile片段 FROM mcr.microsoft.com/dotnet/sdk:latest AS build WORKDIR /src # 先执行依赖还原 COPY *.csproj ./ RUN dotnet restore # 手动补89版本包缺失的Linux驱动目录与文件 RUN mkdir -p /root/.nuget/packages/selenium.webdriver.msedgedriver/89.0.774.54/driver/linux64 \ && cp ./assets/msedgedriver /root/.nuget/packages/selenium.webdriver.msedgedriver/89.0.774.54/driver/linux64/ \ && chmod +x /root/.nuget/packages/selenium.webdriver.msedgedriver/89.0.774.54/driver/linux64/msedgedriver # 正常执行后续构建发布逻辑 COPY . . RUN dotnet publish -c Release -o /app/publish
- 不依赖NuGet包的自动搜索逻辑:在项目根目录新建
- 注意:不要手动修改全局NuGet缓存目录的文件,所有补驱动的逻辑必须纳入版本管理的构建流程,避免本地缓存的临时修改导致构建结果不可复现。
方案3:替换为跨平台自动驱动管理方案
如果不想手动维护驱动文件,可以移除项目中对Selenium.WebDriver.MSEdgeDriver的依赖,改用Selenium官方的驱动自动管理包,它会根据当前运行环境的操作系统、浏览器版本自动匹配下载对应驱动,不需要依赖原有NuGet包的平台目录结构。
关于报错路径末尾的双斜杠问题:89版本的MSEdgeDriver NuGet包的构建脚本,在匹配不到对应平台的目录时,会将平台路径变量赋值为空,最终拼接出
driver//msedgedriver的路径,本质就是缺失Linux对应的平台子目录,不存在其他配置类问题。
内容的提问来源于stack exchange,提问作者remudada
相关产品推荐
相关产品推荐

