【问题标题】:CosmosDB HttpTrigger VS Code Azure Function Could not load assemblyCosmosDB HttpTrigger VS Code Azure 函数无法加载程序集
【发布时间】:2019-09-13 22:02:00
【问题描述】:

尝试使用 CosmosDB 投标创建一个 HttpTrigger v2 Azure 函数,该函数将使用 SqlQuery 从路由数据中查找 ID。这与 Microsoft here 提供的示例非常相似。 我正在使用 VS Code 开发此功能。代码如下:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;

namespace some_namespace
{
    public static class GetUser
    {
        [FunctionName("GetUser")]
        public static IActionResult Run(
            [HttpTrigger(
                AuthorizationLevel.Anonymous, 
                "get", 
                Route = "user/{id}")] HttpRequest req,
            [CosmosDB(
                "DbName", 
                "Users",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "select * from Users u where u.id = {id}")]
                IEnumerable<User> users,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            foreach (User user in users)
            {
                log.LogInformation(user.id);
            }
            return new OkResult();
        }
    }
}

用户类在另一个文件中定义。所有编译都很好,我可以将它上传到 Azure,但是当我导航到该函数时,我收到以下错误:

函数 (.../GetUser) 错误:Microsoft.Azure.WebJobs.Host:错误索引方法“GetUser”。 System.Private.CoreLib:无法加载文件或程序集“Microsoft.Azure.WebJobs.Extensions.CosmosDB,版本=3.0.4.0,文化=中性,PublicKeyToken=31bf3856ad364e35”。无法找到或加载特定文件。 (来自 HRESULT 的异常:0x80131621)。 System.Private.CoreLib:无法加载文件或程序集“Microsoft.Azure.WebJobs.Extensions.CosmosDB, Version=3.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”。

我已根据this 文章修改了我的 host.json 文件以包含 ExtensionBundle,它目前看起来像这样:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[1.*, 2.0.0)"
    }
}

上面应该会自动在我的函数中包含对 CosmosDB 扩展的引用,但它似乎没有,或者我缺少其他东西但不知道是什么。

【问题讨论】:

    标签: visual-studio-code azure-functions


    【解决方案1】:

    尝试将 Microsoft.Azure.WebJobs.Extensions.CosmosDB 安装为 NuGet 包。

    ExtensionBundle 似乎是用于本地开发的。

    【讨论】:

    • 我在本地安装了它,但不知道如何将它添加到 Azure 功能。一篇文章建议我创建一个 function.proj 文件,但后来我遇到了不同的问题。
    • 如果您安装了 NuGet,则该 DLL 应与您的函数一起部署。你能下载你的应用内容吗?在 Azure 门户中,转到您的 Azure 函数,然后在概览页面中单击下载内容。看看那个 DLL 是否存在,是否有不同的版本。
    • 它在我的 bin 文件夹中,在我的程序集旁边。正确的版本(3.0.4.0),不确定 PublicKeyToken 和 Culture,但我认为它是正确的。 extensions.json 也在那里,指向同一个程序集。然而,该功能似乎没有找到它。我被难住了。
    【解决方案2】:

    我不确定是什么修复了上述功能以使其正常工作。在某个时间点,我为使用 Microsoft.Azure.WebJobs.Extensions.CosmosDB 添加了一个冗余导入,但随后我将其删除,该功能仍然有效。上面的代码不会返回找到的对象——下面是一个修改后的工作函数(不需要记录每个返回的用户,但我把它留在那里是为了调试):

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.Logging;
    using System.Collections.Generic;
    
    namespace some_namespace
    {
        public static class GetUser
        {
            [FunctionName("GetUser")]
            public static IActionResult Run(
                [HttpTrigger(
                    AuthorizationLevel.Anonymous, 
                    "get", 
                    Route = "user/{id}")] HttpRequest req,
                [CosmosDB(
                    "DbName", 
                    "Users",
                    ConnectionStringSetting = "CosmosDBConnection",
                    SqlQuery = "select * from Users u where u.id = {id}")]
                    IEnumerable<User> users,
                ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");
    
                foreach (User user in users)
                {
                    log.LogInformation(user.id);
                }
                return new OkObjectResult(users);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2018-11-29
      • 1970-01-01
      • 2018-09-10
      • 2020-11-01
      • 2018-09-12
      • 1970-01-01
      相关资源
      最近更新 更多