You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将.NET Core WebJob与ASP.NET Core Web应用一同发布及通过VSTS发布

我来帮你搞定.NET Core WebJob和Web应用一同发布的问题,还有VSTS(Azure DevOps)发布的具体步骤:

一、.NET Core WebJob与Web应用一同发布的正确配置

你提到的Microsoft.Web.WebJobs.Publish NuGet包确实只针对.NET Framework,.NET Core得用另一种方式实现联动发布,不过你一开始创建的webjob-list.json是正确的方向,我们补全配置就行:

  1. 确认webjob-list.json的位置和内容
    你的文件路径(webproject/Properties/webjob-list.json)和内容都没问题,这个文件是用来告诉VS哪些WebJob要和Web应用一起发布的:

    { 
      "$schema": "http://schemastore.org/schemas/json/webjobs-list.json", 
      "WebJobs": [ 
        { "filePath": "../PeopleWebJob/PeopleWebJob.csproj" }, 
        { "filePath": "../Reminder/ReminderWebJob.csproj" } 
      ] 
    }
    
  2. 在Web项目的.csproj中添加发布联动配置
    打开Web应用的.csproj文件,加入以下MSBuild目标配置,这样在发布Web应用时,会自动触发WebJob的发布,并把输出放到Azure WebJob要求的目录下:

    <!-- 确保webjob-list.json被复制到输出目录 -->
    <ItemGroup>
      <None Include="Properties\webjob-list.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>
    
    <!-- 发布Web应用后自动发布WebJob到对应目录 -->
    <Target Name="PublishWebJobs" AfterTargets="Publish">
      <!-- 发布第一个触发式WebJob -->
      <MSBuild Projects="../PeopleWebJob/PeopleWebJob.csproj" 
               Targets="Publish" 
               Properties="PublishDir=$(PublishDir)App_Data/jobs/Triggered/PeopleWebJob/;
                           Configuration=$(Configuration);
                           RuntimeIdentifier=$(RuntimeIdentifier)" />
      <!-- 发布第二个触发式WebJob -->
      <MSBuild Projects="../Reminder/ReminderWebJob.csproj" 
               Targets="Publish" 
               Properties="PublishDir=$(PublishDir)App_Data/jobs/Triggered/Reminder/;
                           Configuration=$(Configuration);
                           RuntimeIdentifier=$(RuntimeIdentifier)" />
    </Target>
    
    • 注意:如果你的WebJob是持续运行式(而非触发式),要把路径里的Triggered改成Continuous
    • 替换PeopleWebJob和Reminder为你的WebJob实际名称,保持和项目名一致即可

这样配置后,你在VS里发布Web应用时,两个WebJob会被自动打包到App_Data/jobs目录下,一起部署到Azure。

二、通过VSTS(Azure DevOps)发布.NET Core WebJob的步骤

你之前尝试的dotnet publish+复制的思路是对的,我们把它整理成标准的流水线步骤:

  1. 构建阶段:分别发布Web应用和WebJob

    • 添加两个.NET Core任务(分别对应两个WebJob):
      • 命令选择publish
      • 项目路径填**/PeopleWebJob.csproj(另一个填**/ReminderWebJob.csproj)
      • 发布目录设为$(Build.ArtifactStagingDirectory)/WebJobs/PeopleWebJob(另一个对应Reminder)
    • 再添加一个.NET Core任务发布Web应用:
      • 项目路径填你的Web应用csproj路径
      • 发布目录设为$(Build.ArtifactStagingDirectory)/WebApp
  2. 合并WebJob到Web应用的指定目录

    • 添加两个复制文件任务:
      • 第一个的源文件夹:$(Build.ArtifactStagingDirectory)/WebJobs/PeopleWebJob
      • 目标文件夹:$(Build.ArtifactStagingDirectory)/WebApp/App_Data/jobs/Triggered/PeopleWebJob
      • 第二个对应ReminderWebJob,路径做相应替换
  3. 打包并部署到Azure

    • 添加一个归档文件任务:
      • 源目录选$(Build.ArtifactStagingDirectory)/WebApp
      • 归档文件路径设为$(Build.ArtifactStagingDirectory)/webproject.zip
    • 添加一个Azure Web App部署任务:
      • 选择你的Azure订阅和目标Web应用
      • 包或文件夹选择刚才生成的webproject.zip

另外补充两个小细节:

  • 如果是持续运行的WebJob,要确保WebJob项目的.csproj里有<OutputType>Exe</OutputType>,并且在Azure Web应用的配置里开启Always On(否则WebJob会被休眠)
  • 触发式WebJob不需要开启Always On,只要触发条件满足就会运行

内容的提问来源于stack exchange,提问作者Liero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:24:49