Azure WebJobs发布至Azure未生成App_Data目录,TFS 2013 CI问题
解决TFS2013配置Azure WebJobs CI时未生成App_Data目录的问题
我之前也碰到过类似老版本TFS和WebJobs发布兼容的问题,结合你的场景,咱们一步步排查解决:
1. 确认TFS构建定义的MSBuild参数与发布配置
本地VS2017能正常发布,说明项目本身的配置没问题,但TFS构建时可能没加载到正确的发布逻辑:
- 确保构建定义里的MSBuild命令添加了正确的发布参数,比如:
这里的/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PublishProfile=你的Azure发布配置文件名 /p:SkipInvalidConfigurations=truePublishProfile要和你本地VS里用的完全一致,保证TFS复用正确的发布规则。 - 检查WebJobs项目的
.pubxml文件,确认里面包含WebJobs输出目录的配置,这是Microsoft.Web.WebJobs.Publish包生成App_Data结构的关键:<PropertyGroup> <WebJobsDir>App_Data\jobs\continuous\你的WebJob名称</WebJobsDir> </PropertyGroup>
2. 验证NuGet还原与构建工具的兼容性
TFS2013相对老旧,对Build Tools2017的支持需要额外注意:
- 确保构建定义里的NuGet还原步骤正常执行,
Microsoft.Web.WebJobs.Publish包必须被正确还原,否则WebJobs的发布逻辑不会生效。可以在构建服务器上手动跑一次还原命令:nuget restore 你的解决方案.sln,确认没有报错。 - 在构建服务器上手动执行MSBuild命令模拟TFS构建,比如:
查看输出目录是否生成了App_Data结构,如果手动执行正常,那问题大概率出在TFS构建定义的某个配置上;如果手动也不行,可能是Build Tools2017和项目目标框架的兼容性问题,需要调整项目框架版本。MSBuild 你的解决方案.sln /t:Build /p:Configuration=Release /p:DeployOnBuild=true /p:PublishProfile=你的发布配置
3. 检查Web项目与WebJobs的关联配置
如果是Web项目和WebJobs项目共存的解决方案:
- 确保Web项目添加了WebJobs项目的引用,并且在Web项目的构建后事件里有复制WebJobs输出到App_Data的脚本,比如:
要确认TFS构建时是否启用了执行构建后事件,有些情况下构建定义会默认跳过这类脚本。xcopy "$(SolutionDir)WebJobProject\bin\$(ConfigurationName)\*.*" "$(ProjectDir)App_Data\jobs\continuous\WebJobName\" /Y /E - 查看TFS构建的输出目录,检查Web项目的输出里是否包含App_Data\jobs文件夹,如果没有,说明构建过程中没完成复制操作,需要排查构建后事件的执行日志。
4. 调整Azure发布任务的配置
如果用的是TFS的Azure App Service Deploy任务:
- 确保任务中选择的发布包是正确的,包含了App_Data目录的内容。
- 可以在任务的Additional Arguments里添加参数,保证发布时不排除App_Data目录,比如:
避免发布过程中删除或跳过App_Data目录。-enableRule:DoNotDeleteRule -disableRule:AppOffline
内容的提问来源于stack exchange,提问作者amit_g
相关产品推荐
相关产品推荐

