Azure Functions V1运行时RestSharp.dll版本冲突问题求助
你的猜测完全正确——Azure Functions本地CLI运行时确实会优先加载自身目录下的RestSharp.dll,而非项目依赖的版本,这就是引发System.TypeLoadException的根本原因。
冲突产生的原因
Azure Functions CLI(本地运行时)启动时,会将自身安装目录(比如你找到的AppData\local\Azure.Functions.Cli\1.0.12)下的程序集加载到应用域中,且这个目录的加载优先级高于你的项目输出目录。当你的函数尝试加载RestSharp.IAuthenticator时,CLR会优先匹配到CLI自带的105.2.3.0版本,但你的项目代码是基于104.4.0.0版本编译的,两个版本的类型定义不兼容,因此抛出类型加载异常。
可行的解决方法
以下方案按推荐程度排序:
1. 添加程序集绑定重定向(推荐)
通过绑定重定向强制CLR将对105.2.3.0版本RestSharp的请求,重定向到你项目使用的104.4.0.0版本。具体操作:
- 在Function项目根目录创建或修改
web.config(.NET Framework)或app.config(.NET Core/.NET 5+),添加以下配置:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="RestSharp" publicKeyToken="null" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-105.2.3.0" newVersion="104.4.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
该配置会让所有版本≤105.2.3.0的RestSharp请求,都指向你项目的104.4.0.0版本。
2. 升级项目RestSharp版本与CLI保持一致
将项目依赖的RestSharp NuGet包升级到105.2.3.0版本,让项目和CLI使用相同版本的程序集,从根源上避免冲突。注意:升级前要测试代码是否兼容105.2.3.0版本,不同版本可能存在API变更。
3. 手动替换CLI目录中的RestSharp.dll(临时方案)
把项目输出目录里的104.4.0.0版本RestSharp.dll,复制替换到AppData\local\Azure.Functions.Cli\1.0.12目录下的同名文件。但此方案是临时的,因为更新Azure Functions CLI时,该目录下的文件会被覆盖,需要重新替换,不推荐长期使用。
额外提示
在Azure云环境运行函数时,通常不会遇到这个问题——云环境的Functions运行时依赖的程序集版本和本地CLI不同,且会优先加载你部署的项目依赖。本地解决冲突后,记得在云环境验证函数的运行状态。
内容的提问来源于stack exchange,提问作者alcoforado

