部署Azure Function App后CosmosDB SDK出现System.IO.FileNotFoundException求助
排查与修复步骤:
确认部署包包含SDK文件
本地执行发布后,检查输出目录(如bin\Release\net6.0\publish)是否存在Microsoft.Azure.Cosmos.dll。如果本地发布目录都没有该文件,需检查csproj中的依赖配置,确保使用PackageReference而非本地dll引用,示例配置:<PackageReference Include="Microsoft.Azure.Cosmos" Version="3.31.0" />同时确认发布命令(如
func azure functionapp publish <app-name>)执行无报错,发布过程未遗漏依赖项。匹配Azure与本地的运行时版本
CosmosDB SDK 3.31要求.NET 6及以上运行时,登录Azure Portal进入Function App配置页面,查看“运行时堆栈”设置,确保与本地开发使用的.NET版本完全一致(比如本地用.NET 6,Azure不能选.NET 3.1)。清理Azure端的旧部署缓存
部署缓存可能导致旧文件未被覆盖,可通过两种方式清理:- 使用命令行发布时添加
--clean参数:func azure functionapp publish <app-name> --clean - 进入Function App的“高级工具(Kudu)”,在Debug Console中打开
site\wwwroot,手动删除旧的Microsoft.Azure.Cosmos.dll及相关文件后重新发布。
- 使用命令行发布时添加
检查Kudu部署日志
进入Kudu的“Deployment Options”查看最新部署日志,排查是否存在“Failed to restore packages”或“Skipping assembly”类错误。若存在包恢复失败,可在Kudu控制台进入site\wwwroot目录,执行dotnet restore手动恢复依赖。处理依赖版本冲突
本地执行dotnet list package --include-transitive,查看是否有其他NuGet包引用了旧版本的Microsoft.Azure.Cosmos。若存在冲突,可升级冲突包版本,或添加绑定重定向:- 对于In-process模式的Function,将重定向配置写入
functionapp.config:<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Azure.Cosmos" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.31.0" newVersion="3.31.0" /> </dependentAssembly> </assemblyBinding>
- 对于In-process模式的Function,将重定向配置写入
内容的提问来源于stack exchange,提问作者morris295

