Azure Functions 1.x运行时无法加载类库传递依赖程序集问题咨询
我碰到过好几个和你一模一样的场景——本地编译全绿,bin目录里所有依赖都齐活,但Functions运行时就是报Could not load assembly,尤其是针对类库的NuGet传递依赖。结合我的排查经验,给你几个方向试试:
1. 优先检查程序集绑定重定向
Azure Functions 1.x的宿主环境自带了不少基础程序集,它的加载策略会优先从宿主的搜索路径找,而不是直接用你bin目录里的版本。如果你的传递依赖和宿主里的程序集版本冲突,哪怕bin里有文件,运行时也会加载失败。
解决办法是在函数应用项目的web.config里添加绑定重定向,强制运行时使用你bin目录里的版本:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <!-- 把下面的内容替换成你报错的程序集信息 --> <dependentAssembly> <assemblyIdentity name="你的问题程序集名称" publicKeyToken="对应公钥" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-你使用的版本号" newVersion="你使用的版本号" /> </dependentAssembly> </assemblyBinding> </runtime>
你可以通过ILDASM工具或者Visual Studio的“查看程序集属性”获取公钥和版本信息。
2. 强制在函数应用项目中直接引用缺失的依赖
有时候类库的NuGet传递依赖不会被自动复制到函数应用的bin目录(哪怕你看着好像有),或者复制的过程中出现了版本不一致的情况。最稳妥的办法是直接在你的函数应用项目里安装那个报错的NuGet包,版本和类库项目里的保持一致。这样能确保这个依赖被明确标记为需要复制到bin目录,避免传递依赖的“丢失”问题。
3. 清理缓存并重新编译
本地开发时,Visual Studio或者Functions CLI的缓存有时候会搞鬼——比如旧版本的程序集没被完全替换,导致运行时加载了错误的文件。你可以:
- 删除函数应用和类库项目的
bin、obj目录 - 右键解决方案选择“清理解决方案”
- 然后重新生成整个解决方案
- 重启Functions本地运行时(
func host start之前先停掉之前的进程)
4. 检查程序集的强命名兼容性
如果报错的程序集是强命名的,那版本号、公钥必须完全匹配才能加载。哪怕文件存在,只要宿主已经加载了另一个版本的同名称强命名程序集,就会出现加载失败。你可以用以下步骤确认:
- 找到bin目录里的目标程序集,右键选择“属性”→“详细信息”查看版本
- 用ILDASM打开程序集,查看
AssemblyInfo里的公钥令牌 - 确保绑定重定向里的信息和实际程序集完全一致
5. 确认运行时环境配置
如果是在Azure上运行,还要检查函数应用的配置:
- 确认
FUNCTIONS_EXTENSION_VERSION设置为~1(对应1.x运行时) - 确认
WEBSITE_DOTNET_FRAMEWORK_VERSION设置为v4.6.2或者v4.0(4.6.2是v4.0的兼容升级版本,运行时会自动识别)
如果是本地运行,检查local.settings.json里的FUNCTIONS_WORKER_RUNTIME是否设置为dotnet,确保使用的是.NET Framework的运行时而非.NET Core。
内容的提问来源于stack exchange,提问作者MAQ

