【问题标题】:Precompiled Azure Function Behaving Unexpectedly预编译的 Azure 函数行为异常
【发布时间】:2017-04-19 15:35:04
【问题描述】:

MyLibrary.dll

public class Person
{
    [JsonProperty("name")]
    public string Name { get; set; }

    public static async Task Save(Person person)
    {
        DocumentClient client = CreateDocumentClient();
        await client.OpenAsync();

        await client.CreateDocumentAsync(CreateDocumentCollectionUri(), person);
    }
}

MyFunctionApp.dll

public class SimpleHttpTrigger
{
    public static async Task Run(HttpRequestMessage req)
    {
        Person bob = new Person() { Name = "Bob" };
        await Person.Save(bob);
    }
}

MyLibrary 取决于:

  • Newtonsoft.Json10.0.2
  • Microsoft.Azure.Documents.Client1.13.1

MyFunctionApp 依赖于MyLibrary

在此示例中观察到的问题是,当 Azure Function CLI 调用 SimpleHttpTrigger.Run 时,JsonProperty 属性被忽略。当直接从控制台应用程序调用时,SimpleHttpTrigger 的行为符合预期。

可以通过更改 MyLibrary 的依赖项以匹配 Azure Functions CLI 当前使用的版本来解决此问题:

  • Newtonsoft.Json 9.0.1
  • Microsoft.Azure.Documents.Client 1.11.4

当 Azure Function CLI 拥有自己的库版本(在 node_modules/azure-functions-cli/bin 中找到)时,它似乎会忽略 MyFunctionApp/bin 中的库。在这个小例子中,匹配依赖关系很好,但当MyFunctionApp 具有更大的依赖关系时,这是不可行的。

我对这种行为的理解正确吗?

有没有办法指定在预编译函数中使用这些库的哪个版本?我相信通过将依赖项放在函数的 bin 文件夹中,可以在脚本函数中获得这种行为。

更新

我对这种行为原因的假设似乎不正确。

Newtonsoft.Json 和 Microsoft.Azure.Documents.Client 程序集的较新版本实际上与 Azure Function CLI 的自动加载程序集一起加载。

这让我更加困惑,因为 SimpleHttpTrigger.Run 在直接从控制台应用程序调用时的行为与在 Azure 函数主机调用时的行为仍然不同。

有什么想法吗?可能是我的一些愚蠢的事情。

更新 2

看起来使用了两个不同版本的Newtonsoft.Json,无论以何种方式加载程序集:

MyLibrary 按预期使用Newtonsoft.Json 10.0.2,但其依赖项Microsoft.Azure.Documents.Client 1.13.1 使用Newtonsoft.Json 9.0.1

这可以解释JsonProperty 属性的不兼容性。

可能吗?请帮忙,我很困惑!

【问题讨论】:

    标签: azure azure-webjobs azure-cosmosdb azure-functions


    【解决方案1】:

    基本上,您对问题的诊断是正确的。 这是 Azure Functions 的一个未解决问题。 我自己偶然发现了这一点,并同情你的挫败感。

    在解决问题之前,您必须使用与 Azure Functions 实现共享的所有依赖项的相同主要版本。

    这里是 Azure Functions 依赖项列表:https://github.com/Azure/azure-webjobs-sdk-script/blob/dev/src/WebJobs.Script/packages.config

    要跟踪的未解决问题: https://github.com/Azure/azure-webjobs-sdk-script/issues/573 https://github.com/Azure/azure-webjobs-sdk-script/issues/1311

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      相关资源
      最近更新 更多