Azure Function添加async后无法加载System.Runtime程序集求助
解决Azure Function异步操作中System.Runtime程序集加载错误的问题
这个问题的核心原因有几个,我帮你逐一拆解并给出修复方案:
1. 立即修复async void的问题
你当前的函数用了async public static void Run,这是异步编程里的大忌!Azure Functions运行时需要跟踪异步操作的完成状态,async void会让运行时误以为函数已经执行完毕,提前释放相关资源(包括依赖的程序集),这直接导致了你遇到的System.Runtime加载错误。
把返回类型改成async Task就好,这是Azure Functions支持的异步函数标准写法:
[FunctionName("MyTestFunction")] public static async Task Run( [ServiceBusTrigger("testtopic", "testsubscription", AccessRights.Listen, Connection = "MyServiceBusConnection")] string mySbMsg, TraceWriter log) { // 后续代码保持逻辑,下面会优化其他问题 }
2. 优化DocumentClient的实例化方式
不要每次函数调用都新建DocumentClient实例,它是线程安全的,应该复用静态实例——频繁创建销毁不仅浪费资源,也可能加剧程序集加载的问题:
// 静态实例,只初始化一次 private static readonly DocumentClient _client = new DocumentClient(new Uri(ENDPOINT), ENDPOINT_KEY); [FunctionName("MyTestFunction")] public static async Task Run( [ServiceBusTrigger("testtopic", "testsubscription", AccessRights.Listen, Connection = "MyServiceBusConnection")] string mySbMsg, TraceWriter log) { var document = JsonConvert.SerializeObject(new { newmessage = mySbMsg }); // 别用string.Format拼JSON,容易出错 await _client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(DATABASE, COLLECTION_ID), document); log.Info($"C# ServiceBus topic trigger function processed message: {mySbMsg}"); }
注意:我把string.Format拼JSON改成了用JsonConvert(需要引用Newtonsoft.Json包),避免手动拼接JSON时的语法错误,这也是常见的坑。
3. 检查NuGet包依赖
确保你的项目引用了正确版本的依赖包:
- 对于Azure Functions v1(.NET Framework):引用
Microsoft.Azure.WebJobs.ServiceBus、Microsoft.Azure.DocumentDB,并确保Microsoft.NET.Sdk.Functions版本匹配。 - 对于Azure Functions v2+(.NET Core/.NET 6+):引用
Microsoft.Azure.WebJobs.Extensions.ServiceBus、Microsoft.Azure.Cosmos(注意v2+用Cosmos包替代旧的DocumentDB包),同时确保Microsoft.NET.Sdk.Functions是最新兼容版本。
另外,清理并重新生成项目,有时候缓存的程序集引用会导致加载错误。
4. 验证目标框架设置
如果是v1函数,目标框架设为.NET Framework 4.8;如果是v2+,设为.NET 6或更高版本(推荐LTS版本),不匹配的框架版本也会导致程序集加载异常。
内容的提问来源于stack exchange,提问作者fUrious
相关产品推荐
相关产品推荐

