debugging 使用Visual Studio 2019在本地调试Azure函数

c3frrgcw  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(201)

我想每天早上5点运行一个任务,将一些数据写入数据库以创建一些报告。为此,我想我可以使用Azure Functions(Timer trigger)。我的目标是在将函数发布到Azure之前,首先在本地调试该函数(使用本地数据库)。为此,我在Visual Studio 2019中创建了一个新的Azure Functions项目,并使用以下参数:

  • .NET 5.0(独立)。
  • 定时器触发。
  • 存储帐户(AzureWebJobsStorage):存储仿真器。
  • 计划:0 0 5 * * *

如果我尝试在不对代码进行任何更改的情况下运行该函数(按键盘上的F5),则会打开一个CMD窗口,其中包含使用字符创建的彩色Azure Functions徽标,然后出现以下错误:

错误:未知参数--port

在项目属性〉调试选项卡〉应用程序参数中,我有--port 7282。我有一个系统托盘图标,显示以下消息:存储仿真器已启动。
我尝试了What is the simplest way to run a timer-triggered Azure Function locally once?问题的答案,但得到了相同的错误。
我需要做些什么才能在本地调试函数?我需要安装任何特定的工具吗?
如果有帮助,我有以下文件:

程序.cs

public class Program
{
    public static void Main()
    {
        var host = new HostBuilder()
            .ConfigureFunctionsWorkerDefaults()
            .Build();

        host.Run();
    }
}

函数1.cs:

public class Function1
{
    private readonly ILogger _logger;

    public Function1(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<Function1>();
    }

    [Function("Function1")]
    public void Run([TimerTrigger("0 0 5 * * *")] MyInfo myTimer)
    {
        _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        _logger.LogInformation($"Next timer schedule at: {myTimer.ScheduleStatus.Next}");
    }
}

public class MyInfo { ... }
public class MyScheduleStatus { ... }
fv2wmkja

fv2wmkja1#

为什么是港口?
如果你删除--port会发生什么(不能评论,由于我的低代表。有我试图给予答案)
然后尝试将RunOnStartup=true添加到Function参数,如下所示:

[Function("Function1")]
    public void Run([TimerTrigger("0 0 5 * * *") RunOnStartup=true] MyInfo myTimer)
    {
        _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        _logger.LogInformation($"Next timer schedule at: {myTimer.ScheduleStatus.Next}");
    }

这应该会触发它在应用程序启动时运行。
你看过MS Learn docs了吗

相关问题