Azure WebJob按Build配置条件发布settings.job遇阻求助
问题原因
本地构建和Azure发布的文件处理逻辑存在差异:
- pubxml里的复制配置仅负责将文件复制到本地输出目录,但不会把文件标记为发布所需的内容资源。
- Visual Studio的Web发布管道(Web Deploy)只会打包项目文件中标记为
<Content>的文件,或者明确指定要发布的文件。之前仅通过pubxml复制到输出目录的settings.job,因为没被标记为发布内容,所以不会被纳入Azure发布包。 - 当你在项目文件设置为“始终复制”时,文件会被自动标记为
<Content>类型,因此会被发布管道识别并打包上传。
实现条件发布的两种方法
方法1:修改项目文件(推荐)
直接在项目的.csproj/.vbproj文件中添加条件性配置,针对特定Build配置(如Nightly)控制settings.job的发布行为:
<!-- 当配置为Nightly时,将settings.job标记为发布内容并复制 --> <ItemGroup Condition="'$(Configuration)' == 'Nightly'"> <Content Include="settings.job"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> </ItemGroup> <!-- 其他配置下,不复制也不发布该文件 --> <ItemGroup Condition="'$(Configuration)' != 'Nightly'"> <None Include="settings.job"> <CopyToOutputDirectory>Never</CopyToOutputDirectory> <CopyToPublishDirectory>Never</CopyToPublishDirectory> </None> </ItemGroup>
保存项目文件后,切换到Nightly配置构建并发布,settings.job就会被自动包含到Azure发布包中;其他配置则不会。
方法2:修改pubxml发布配置
如果不想修改项目文件,也可以在对应的发布配置文件(*.pubxml)中添加条件性发布规则:
<PropertyGroup> <!-- 确保发布时使用对应配置的条件判断 --> <PublishSettingsJob Condition="'$(Configuration)' == 'Nightly'">True</PublishSettingsJob> </PropertyGroup> <ItemGroup Condition="'$(PublishSettingsJob)' == 'True'"> <Content Include="settings.job"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> </ItemGroup>
注意:这种方式需要确保项目文件中没有对settings.job设置冲突的<CopyToPublishDirectory>规则,否则可能会覆盖pubxml的配置。
内容的提问来源于stack exchange,提问作者Dale Lundgren
相关产品推荐
相关产品推荐

