未找到工作职能。尝试公开您的工作类别和方法。转换为隔离工作模型函数时出错

问题描述 投票:0回答:1

我从 .NET 6 升级到 .NET 8,然后将我的 Azure 函数从进程内转换为隔离工作模型。之后,当我运行函数应用程序时,出现此错误:

错误图片

这是我的

.csproj
文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <CodeAnalysisRuleSet>..\CodeAnalysisRules.ruleset</CodeAnalysisRuleSet>
    <UserSecretsId>ce4cc206-fbfd-4ab4-94b6-3ef5b1c290ee</UserSecretsId>
  </PropertyGroup>
  <PropertyGroup>
    <ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.22.0" />
    <PackageReference Include="Microsoft.Azure.Cosmos" Version="3.46.1" />
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="2.0.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.2.2" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.2.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.22.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.SignalRService" Version="1.14.1" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Timer" Version="4.3.1" />
    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.1" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.6.0" />
    <PackageReference Include="PEMS.Core.Messaging" Version="2.0.7" />
    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\PEMS.DeviceManagementService.Shared\PEMS.DeviceManagementService.Shared.csproj" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
<ItemGroup>
    <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext" />
</ItemGroup>
</Project>

如何解决这个问题?

我删除了

Microsoft.NET.Sdk.Functions
,但仍然有同样的错误。我所有的功能都是公开的,我已经添加了

"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" 

local.settings.json
- 但问题仍然存在。

azure-functions upgrade .net-8.0 azure-functions-isolated
1个回答
0
投票

我可以看到您的 Microsoft.Azure.Functions.Worker.Sdk 中缺少独立 Azure 函数

Microsoft.AspNetCore.App
.csproj
核心包
,请参阅 MSDOC 将函数从进程内升级到隔离。

  1. 安装 NuGet 包

    Microsoft.Azure.Functions.Worker.Sdk
    ,版本为
    1.16.4 or later

  2. 将框架引用添加到

    Microsoft.AspNetCore.App

  3. <Nullable>enable</Nullable>
    中添加
    .csproj

Service Bus触发.NET 8.0隔离Azure功能的

.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="2.0.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.22.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.0" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext" />
  </ItemGroup>
</Project>

local.settings.json:

{
    "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "ServiceBusConnection": "ServiceBus_ConnectionString"
  }
}

代码片段:

函数.cs:

 [Function(nameof(Function1))]
 public async Task Run(
     [ServiceBusTrigger("queue1", Connection = "demo")]
     ServiceBusReceivedMessage message,
     ServiceBusMessageActions messageActions)
 {
     _logger.LogInformation("Message ID: {id}", message.MessageId);
     _logger.LogInformation("Message Body: {body}", message.Body);
     _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);

     await messageActions.CompleteMessageAsync(message);
 }

程序.cs:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices(services =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
    })
    .Build();

host.Run();
© www.soinside.com 2019 - 2024. All rights reserved.