Azure function returns error: No job functions found. Try making your job classes and methods public

Azure function returns error: No job functions found. Try making your job classes and methods public

我在 Visual Studio 2017 年创建了一个 Azure Function 应用程序,并且可以使用 Visual Studio 发布功能(右键单击项目然后 select 发布)毫无问题地将其发布到 Azure。

由于从 Visual Studio 的开发人员实例部署不是理想的持续集成策略,我使用 TeamCity 和 Octopus 创建了一个部署管道,其中 TeamCity 构建 Azure 函数应用程序,而 Octopus 使用 WAWSDeploy 应用程序将 Azure 函数文件部署到 Azure。部署工作正常,当我查看通过 WAWSDeploy 部署的 Azure 函数文件时,这些文件与我从 Visual Studio 发布 Azure 函数应用程序时完全相同。

但是 当我从 WAWSDeploy 部署(通过查看 Azure Function 应用程序日志)时,我收到错误 No job functions found. Try making your job classes and methods public.Invalid script file name configuration. The 'scriptFile' property is set to a file that does not exist.。这似乎不是 WAWSDeploy 问题,但看起来 Visual Studio 发布功能正在做我缺少的事情。有什么想法吗?

Azure 函数文件的文件夹结构:

问题是由 function.json 文件中的 scriptFile 值不正确引起的。当我从 Visual Studio 发布 Azure 函数时,此值设置正确,但是当我构建 Azure 函数并将文件手动推送到 Azure 函数应用程序时,scriptFile 值缺少 bin 文件夹在我的函数 dll 文件的路径中。在构建过程中,我现在破解 scriptFile 值以正确设置它。

我遇到过类似的问题,最终找到了根本原因。您可以解决此问题,但将此问题放在这里是为了其他面临此问题的人。

确保您在 的函数应用程序

的 .csproj 中有以下元素块
<None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>

当我从项目中排除 host.json 然后重新创建一个(在意识到这是肯定需要的)时,我遇到了这个问题。

有效的 .csproj 应该看起来像这样

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
  </PropertyGroup>

  ...
  ...
  ...

  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

希望添加它可以解决这个问题。让我知道这是否有帮助:)

我遇到了同样的问题,

我删除了 bin 和 obj 文件夹并重建了项目,然后它就可以正常工作了。