Azure函数 - 无法从Azure WebJobs SDK

时间:2018-04-11 08:18:11

标签: c# azure azure-functions azure-compute-emulator

所以我一直在尝试创建一个简单的azure函数,它将是一个http触发器" CreateUser"。
我做了另一个http触发器以简化错误,看起来很简单:

using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;

namespace TutoTableAzureTemplate
{
    public static class TestTrigger
    {
        [FunctionName("TestTrigger")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route =  null)]HttpRequestMessage req, TraceWriter log)
        {
            return req.CreateResponse(HttpStatusCode.OK, "This request arrived succcesfully");
        }
    }
}

这在模拟器上运行会给我带来以下错误:

Error indexing method 'TestTrigger.Run'. Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'log' to type TraceWriter. Make sure the parameter Type is supported by the binding.

(我的模拟器的版本是5.3)
我试图删除参数TraceWriter log,函数&#34;运行&#34;很好...直到我使用Postman发送一个http请求,这带来了一个关于WebJobs的错误:

"System.InvalidOperationException : 'TestTrigger' can't be invoked from Azure WebJobs SDK. Is it missing Azure WebJobs SDK attributes? ... "

我想知道该属性是否是导致上一个问题的TraceWriter log以及是否有办法将其带回此处...

哦,顺便说一下,我进入了某种版本的地狱冲突,出于某种原因,我不得不使用.NET Standard 2.0而不是我之前使用的.NET 461,以及教程建议。 这是我的.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>    
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.13" />
    <PackageReference Include="Microsoft.Azure.Storage.Common" Version="9.0.0.1-preview" />
    <PackageReference Include="Microsoft.Azure.CosmosDB.Table" Version="1.1.1" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

"Microsoft.Azure.CosmosDB.Table"显然在.NET Standard 2.0中不可用,并且.NET 461版本在这里得到了验证,但是&#34;它只是一个警告&#34; ...和{{ 1}}仅适用于预览。

这可能与某个地方的某个版本有关,但我在教程中迷失了所有使用不同的东西,而且因为我对Azure很新,所以我不知道&#39;发生...

3 个答案:

答案 0 :(得分:3)

  

出于某种原因,不得不使用.NET Standard 2.0而不是我以前使用的.NET 461,以及教程建议。

似乎在创建azure函数initial时,您的函数是.NET 461,并且出于某种原因,您将其更改为.NET Standard 2.0。

但是,当您的功能是.NET Standard 2.0时,您的运行时版本应设置为beta

因此,在.csproj中添加<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <AzureFunctionsVersion>v2</AzureFunctionsVersion> </PropertyGroup> ,因为默认的 .NET 461运行时为1 ,当您更改为.NET核心时,需要将运行时更改为“ beta “手动。

您可以参考以下代码:

{{1}}

答案 1 :(得分:0)

我在VS 2019上创建新的Azure Function V2时遇到了此问题,并且包含了该功能应用程序所引用的另一个项目。删除另一个项目已为我修复。

答案 2 :(得分:0)

现在是2020年,我在vs 2019中创建了我的Azure Functions v1,并遇到了相同的错误。但是,我通过如下编辑.csproj文件找出了解决方法:

    <AzureFunctionsVersion>v2</AzureFunctionsVersion>