VS中的Azure函数本地开发无法找到函数

时间:2018-06-15 13:31:09

标签: c# visual-studio azure azure-web-sites azure-functions

我目前正在Visual Studio中使用Microsoft的Azure功能开发一个功能应用程序。我能够在azure上部署和发布这些功能,但它似乎在运行,但每当我尝试运行本地功能时,托管环境都无法找到任何 “作业”。我在下面列出了一张图片。

必须说明我在某个时候能够在本地部署,但我相信经过一些更新后,我无法运行我的功能

当前版本的 Azure功能和网络作业工具 :15.0.40424.0

在创建新项目但结果不成功时,我尝试使用Azure Functions V1(.NET Frameworks)和Azure Functions V2(.NET Core)。我还试图创建一个新的干净项目,重新安装VS,并在任何奇怪的设置情况下重置Windows。

我是否遗漏了某些内容并明确需要在某处显示我的功能,以便托管环境可以找到它们?

托管环境未找到任何功能:

[6/20/2018 7:24:37 AM] Host configuration file read:
[6/20/2018 7:24:37 AM] {}
[6/20/2018 7:24:37 AM] Starting Host (HostId=2017noy-1005193785, 
 InstanceId=c8332a19-7eb3-4446-9b3e-4307f20a57bc, Version=2.0.11651.0, 
 ProcessId=15184, AppDomainId=1, Debug=False, ConsecutiveErrors=0, 
 StartupCount=1, FunctionsExtensionVersion=)

[6/20/2018 7:24:38 AM] Generating 0 job function(s)
[6/20/2018 7:24:38 AM] No job functions found. Try making your job classes 
 and methods public. If you're using binding extensions (e.g. ServiceBus, 
 Timers, etc.) make sure you've called the registration method for the 
 extension(s) in your startup code (e.g. config.UseServiceBus(), 
 config.UseTimers(), etc.).

模板空HTTPTrigger功能 - Function1.cs:

using System.IO;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;

namespace FunctionApp1
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static IActionResult 
        Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = 
            null)]HttpRequest req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            string name = req.Query["name"];

            string requestBody = new StreamReader(req.Body).ReadToEnd();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query 
                                            string or in the request body");
        }
    }
}

CSPROJ文件

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.13" 
/>
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

local.settings.json

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

2 个答案:

答案 0 :(得分:1)

function.json文件是在VS构建之后生成的。检查它是否在以您的函数命名的文件夹中,位于~\bin\Debug\netstandard2.0文件夹下。

enter image description here

如果您没有看到Function1之类的文件夹(其中包含function.json),则可能是您的同事遇到了同样的问题。

找不到原因,VS只是无法在同事的计算机上生成function.json,但从我的角度来看一切正常(VS和Azure Function和Web Jobs Tools具有相同的版本)。

我们发现的解决方法是将Microsoft.NET.Sdk.Functions降级为1.0.12

仅供参考,我们还尝试升级Azure Function and Web Jobs Tools并删除Microsoft.NET.Sdk.Functions中的C:\Users\UserName\.nuget\packages\microsoft.net.sdk.functions\1.0.13,然后重新安装此软件包。

更新

Microsoft.NET.Sdk.Functions升级到1.0.14的最新版本也对我们有效。

答案 1 :(得分:1)

我遇到了同样的问题,但我已将 Microsoft.NET.Sdk.Functions 从版本 3.0.11 降级到 3.0.10,然后启动一个程序,一旦程序成功运行,它就会在控制台应用程序中显示我的所有功能 我已经升级到以前的功能 3.0.11 它工作。