Azure函数V2部署DocumentFormat.OpenXml 2.8.1遇程序集加载异常
我之前碰到过完全一样的情况!本地运行正常,但发布到Azure就报Could not load file or assembly 'System.IO.Packaging, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'的错误,本质原因是Azure Functions V2的运行时环境和你本地开发环境的依赖版本不匹配。这里有几个亲测有效的解决办法:
方案1:添加绑定重定向
Azure Functions V2基于.NET Core/.NET 5+运行时,其中已经包含了更高版本的System.IO.Packaging,我们需要通过绑定重定向让应用指向环境中存在的版本:
- 在你的函数项目中找到
web.config文件(如果没有就新建一个) - 在
<runtime>节点下添加以下配置:
<dependentAssembly> <assemblyIdentity name="System.IO.Packaging" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.3.0" /> </dependentAssembly>
这个配置会把所有对4.0.2.0版本的请求重定向到Azure环境中存在的4.0.3.0版本。
方案2:升级DocumentFormat.OpenXml到兼容版本
你使用的2.8.1版本比较老旧,对.NET Core环境的支持不够完善。建议升级到最新的稳定版(比如3.x及以上),新版本已经针对.NET Core/.NET 5+做了适配,大概率会直接解决这个依赖冲突问题。
方案3:确保依赖被正确部署
有时候发布过程中,部分依赖没有被正确复制到Azure的部署目录。可以在项目的.csproj文件中添加以下配置,强制包含相关依赖:
<ItemGroup> <PackageReference Include="DocumentFormat.OpenXml" Version="2.8.1"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup>
另外,在发布设置里请确认勾选了Include all dependencies in the deployment package选项,确保所有必要的依赖都被打包上传。
我当时是结合方案1和方案2解决的问题,你可以先尝试方案1,要是不行再升级NuGet包,应该就能解决啦!
内容的提问来源于stack exchange,提问作者Boyi

