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
}
}
}
}
依赖项如下:
我试过以下方法:
- 正在修复 Visual Studio。
- 在发布设置中添加远程 Azure 功能。
- 运行 通过
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.Blob
换 CloudBlockBlob
.
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
}
}
}
}
依赖项如下:
我试过以下方法:
- 正在修复 Visual Studio。
- 在发布设置中添加远程 Azure 功能。
- 运行 通过
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.Blob
换 CloudBlockBlob
.