function.json 的 Azure 函数在本地缺少绑定

Azure function missing bindings in local for function.json

Visual Studio 2017 v15.9.25.

Azure 函数 v2.

这是我的 运行 函数:

public static async Task Run(
        [TimerTrigger("0 */2 * * *")]TimerInfo myTimer,
        ILogger log,
        [Blob("BlobContainer/blob.json", FileAccess.ReadWrite, Connection = "AzureWebJobsStorage")] CloudBlockBlob stateStore,
        ExecutionContext context)
    {

当我在 VS 中本地构建函数时,function.json 没有绑定到 blob 存储。

所以,当我尝试在本地 运行 它时,它给出了以下错误:

 The 'AzureFunctionApp' function is in error: 
Microsoft.Azure.WebJobs.Host: Error indexing method 'AzureFunctionApp'. 
Microsoft.Azure.WebJobs.Host: Can't bind Blob to type 'Microsoft.Azure.Storage.Blob.CloudBlockBlob'.

这是 host.json :

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    }
  }
}

依赖项如下:

我试过以下方法:

  1. 正在修复 Visual Studio。
  2. 在发布设置中添加远程 Azure 功能。
  3. 运行 通过 func host json 以及在 VS17 中调试。

我已经阅读了其他 6 个类似的问题,但没有找到有用的解决方案。

请帮我解决一下。

对于这个问题,我经历了一些类似的问题。它们中的大多数是在 VS2017 中创建的,并带有 WindowsAzure.Storage 包。根据你提供的截图,我知道你没有安装这个包,但是我建议你将你的 Visual Studio 从 2017 更新到 2019,因为 VS2019 更适合我们开发 azure 功能(也许还有一些VS2017 和 VS2019 之间“存储模拟器”的区别。

将 Visual Studio 更新到 2019 后,请创建一个新的功能应用程序,其中没有任何其他包。我注意到您的屏幕截图中还有一些其他软件包,例如“azure keyvault”。然后将上面的代码复制到你的新函数中,并一个一个地安装包。

下面提供我的功能的详细信息供您参考。我在 VS2019 中创建它,它运行良好。

函数代码和安装包:

local.settings.json

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet"
    }
}

csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.2" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.31" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

顺便说一下,我的 function.json 也不包含有关 blob 存储的绑定。所以我认为这与你的问题无关。

function.json

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.31",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "timerTrigger",
      "schedule": "*/30 * * * * *",
      "useMonitor": true,
      "runOnStartup": false,
      "name": "myTimer"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/FunctionAppV2.dll",
  "entryPoint": "FunctionAppV2.Function1.Run"
}

================================更新==== ====================

我复现了你的问题,可能是使用了错误的包造成的。

尽管您安装的软件包的屏幕截图中没有软件包 WindowsAzure.Storage。不过这个包不需要安装,直接在函数中使用即可。

在我的函数代码中,如果我using Microsoft.WindowsAzure.Storage.Blob如下图所示,它会显示和你一样的错误信息。所以请 using Microsoft.Azure.Storage.BlobCloudBlockBlob.