TelemetryClient.StartOperation 在 Azure 函数中将 Activity 作为参数传递时总是失败

TelemetryClient.StartOperation always failed when passing an Activity as parameter in Azure function

我有一个使用 BlobTrigger 的简单 Azure 函数,我想使用 Application Insights SDK 来处理自定义遥测。

    [FunctionName("Create-Thumbnail")]
    [StorageAccount("AzureWebJobsStorage")]
    public static void CreateThumbnail([BlobTrigger("input/{name}")] Stream image,
        [Blob("output/{name}", FileAccess.Write)] Stream imageSmall,
        ILogger log)
    {
        var requestActivity = new Activity("Create-Thumbnail");
        requestActivity.SetParentId("SOME PARENT ID");

        var newConfig = TelemetryConfiguration.CreateDefault();
        TelemetryClient telemetryClient = new TelemetryClient(newConfig);
        var requestOperation = telemetryClient.StartOperation<RequestTelemetry>(requestActivity);
        
        ...

        telemetryClient.StopOperation(requestOperation);

    }

但是,这总是失败并出现以下错误:

Method not found: 'Microsoft.ApplicationInsights.Extensibility.IOperationHolder`1<!!0> Microsoft.ApplicationInsights.TelemetryClientExtensions.StartOperation(Microsoft.ApplicationInsights.TelemetryClient, System.Diagnostics.Activity)'.

根据这个 GitHub 问题:https://github.com/Azure/azure-functions-core-tools/issues/2399,可以通过恢复到 2.14.0 来解决。但是,我已经尝试了所有回到 2.8.1 的版本。 None 他们工作了。

传递字符串而不是 Activity 确实有效。

var requestOperation = telemetryClient.StartOperation<RequestTelemetry>("Create-Thumbnail");

但是我需要通过 Activity 来配置更多上下文。

有人知道问题出在哪里吗?

根据我的搜索,我找到了 this document,它说

There is a Functions-specific version of the Application Insights SDK that you can use to send custom telemetry data from your functions to Application Insights: Microsoft.Azure.WebJobs.Logging.ApplicationInsights

所以我按照示例代码进行测试,但是这个包的最新稳定版本(3.0.27)会return和你的一样的错误,但是当我改成v3 .0.25,错误消失。

我也偶然发现了这个问题,发现“Microsoft.ApplicationInsights”版本 2.15 有效,但 2.16 没有...但除此之外...

Microsoft.ApplicationInsights 2.15 版依赖于“System.Diagnostics.DiagnosticSource”4.6.0 版...我们的一个项目引入了 5.0.0 版,这导致 Microsoft.ApplicationInsights使用 5.0.0 版本而不是它通常使用的 4.6.0 版本...因此这种组合也会导致

Method not found: 'Microsoft.ApplicationInsights.Extensibility.IOperationHolder`1<!!0> Microsoft.ApplicationInsights.TelemetryClientExtensions.StartOperation(Microsoft.ApplicationInsights.TelemetryClient, System.Diagnostics.Activity)'.

待生产...我们将引用 5.0.0 的项目降级为 4.6.0,并且未找到方法的问题消失了。