VSTS中.NET Core 2 WebJob与WebApp构建定义配置问题咨询
我之前在配置.NET Core 2 WebJob和WebApp的VSTS构建时,也踩过关联失败的坑,结合实际经验给你几个可行的解决方向:
先检查WebJob的项目基础配置
- 确保输出结构符合Azure规范:Azure要求WebJob文件必须放在WebApp的
App_Data/Jobs/[Continuous/Triggered]/[WebJobName]目录下。不管是触发型还是连续型WebJob,这个路径是关联的核心前提,VSTS部署时必须保证WebJob产物被放到这个位置。 - 核对
settings.job文件:如果是触发型WebJob,这个文件里的CRON表达式或调度规则要准确;连续型WebJob也要确保文件里的配置(比如is_singleton)正确。而且这个文件必须和WebJob的二进制文件放在同一目录,不能缺失。
调整VSTS构建与部署任务的逻辑
- 合并部署任务(推荐):不要分开用两个Azure App Service部署任务,而是先把WebApp和WebJob的产物合并到同一个发布目录。具体操作:
- 完成解决方案构建后,添加一个复制文件任务,源路径选WebJob项目的发布输出(比如
$(Build.SourcesDirectory)/YourWebJobProject/bin/$(BuildConfiguration)/netcoreapp2.0/publish/),目标路径设为WebApp发布目录的对应子目录:$(Build.ArtifactStagingDirectory)/YourWebApp/App_Data/Jobs/Triggered/YourWebJob(根据WebJob类型调整Triggered为Continuous)。 - 然后只用一个Azure App Service部署任务,把合并后的
$(Build.ArtifactStagingDirectory)/YourWebApp部署到目标WebApp。
- 完成解决方案构建后,添加一个复制文件任务,源路径选WebJob项目的发布输出(比如
- 如果要分开部署:在第二个部署WebJob的任务里,一定要把“部署类型”选为WebJob,而不是默认的“Web App”。然后指定WebJob的名称、类型(连续/触发),以及关联的目标WebApp,这样VSTS会自动把WebJob部署到WebApp的对应目录下。
- 检查.NET Core发布参数:如果用
dotnet publish命令单独处理WebJob,要加上--output参数指定到WebApp的对应子目录,比如:dotnet publish YourWebJobProject.csproj --configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/YourWebApp/App_Data/Jobs/Triggered/YourWebJob
验证Azure端的状态
- 部署完成后,登录Azure门户进入你的WebApp,打开“WebJobs”面板查看是否有对应的WebJob。如果没显示,用Kudu工具(
https://<你的WebApp名称>.scm.azurewebsites.net/DebugConsole)检查App_Data/Jobs目录下是否存在你的WebJob文件。如果文件存在但门户没显示,重启WebApp即可刷新缓存。
排查.NET Core 2的特定问题
- 确认目标框架配置:检查WebJob项目的
.csproj文件,确保<TargetFramework>netcoreapp2.0</TargetFramework>配置正确,没有引用与.NET Core 2不兼容的NuGet包。 - 检查依赖完整性:.NET Core 2 WebJob需要
*.deps.json、*.runtimeconfig.json这些配置文件才能正常运行。在Kudu里查看WebJob目录,确认这些文件是否存在,如果缺失,要检查VSTS的构建任务是否正确复制了所有发布产物。
内容的提问来源于stack exchange,提问作者Bob Meijwaard
相关产品推荐
相关产品推荐

