在发布到 Azure WebJob 期间有条件地包含文件

问题描述 投票:0回答:1

我在 Azure 上有一个 webjob,我想根据 Visual Studio 2022 中的构建配置有条件地包含“settings.job”文件。我当前的 pubxml 文件如下:

<Project>
    <PropertyGroup>
        <WebPublishMethod>MSDeploy</WebPublishMethod>
        <PublishProvider>AzureWebSite</PublishProvider>
        <LastUsedBuildConfiguration>Nightly</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish>https://myfakeapp.azurewebsites.net</SiteUrlToLaunchAfterPublish>
        <LaunchSiteAfterPublish>false</LaunchSiteAfterPublish>
        <ResourceId>my/fake/resourceid</ResourceId>
        <UserName>$myfakeusername</UserName>
        <_SavePWD>false</_SavePWD>
        <ExcludeApp_Data>false</ExcludeApp_Data>
        <MSDeployServiceURL>myfakeapp.scm.azurewebsites.net:443</MSDeployServiceURL>
        <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
        <SkipExtraFilesOnServer>true</SkipExtraFilesOnServer>
        <EnableMsDeployAppOffline>true</EnableMsDeployAppOffline>
        <EnableMSDeployBackup>true</EnableMSDeployBackup>
        <DeployIisAppPath>myfakeapp</DeployIisAppPath>
        <WebJobType>Triggered</WebJobType>
        <WebJobName>MyFakeApp_Nightly_Job</WebJobName>
        <TargetFramework>net6.0</TargetFramework>
        <SelfContained>false</SelfContained>
    </PropertyGroup>
    <Target Name="CopyFiles" BeforeTargets="Publish">
        <ItemGroup>
            <JobFile Include="Settings.job" />
        </ItemGroup>
        <Copy SourceFiles="@(JobFile)" DestinationFolder="$(OutDir)" Condition=" '$(Configuration)' == 'Nightly' " SkipUnchangedFiles="false" />
    </Target>
</Project>

这适用于本地,因为 settings.job 文件有条件地复制到输出文件夹,但该文件不会发布到 Azure。我尝试了 BeforeTargets 和 AfterTargets 的多种组合:Build、Publish、PrepareForPublish 均无济于事。

将文件发布到 Azure 的唯一方法是将其设置为始终复制到项目文件中:

<ItemGroup>
    <None Update="Settings.job">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
</ItemGroup>

为什么有条件复制的文件没有包含在发布到 Azure 的内容中?有谁能够让这个概念发挥作用吗?

msbuild visual-studio-2022 azure-webjobs
1个回答
0
投票

在您的情况下,

Settings.job
文件有条件地复制到本地输出文件夹,但未包含在到 Azure 的发布过程中。

这是我这边的发布文件:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <PublishProvider>AzureWebSite</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish>https://webjob12xxx11.azurewebsites.net</SiteUrlToLaunchAfterPublish>
    <LaunchSiteAfterPublish>false</LaunchSiteAfterPublish>
    <ResourceId>/subscriptions/8xxx193e/resourcegroups/bowmantest/providers/Microsoft.Web/sites/WebJob1202xxx911</ResourceId>
    <UserName>$WebJob12xxx1911</UserName>
    <_SavePWD>true</_SavePWD>
    <ExcludeApp_Data>false</ExcludeApp_Data>
    <MSDeployServiceURL>webjob12xxx911.scm.azurewebsites.net:443</MSDeployServiceURL>
    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
    <SkipExtraFilesOnServer>true</SkipExtraFilesOnServer>
    <EnableMsDeployAppOffline>true</EnableMsDeployAppOffline>
    <EnableMSDeployBackup>true</EnableMSDeployBackup>
    <DeployIisAppPath>WebJob120xxx911</DeployIisAppPath>
    <WebJobType>Triggered</WebJobType>
    <WebJobName>WebJob1</WebJobName>
  </PropertyGroup>

  <!-- ... This is the key part ... -->
  <Target Name="IncludeSettingsJob" BeforeTargets="PrepareForPublish">
    <ItemGroup>
      <Content Include="Settings.job">
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      </Content>
    </ItemGroup>
  </Target>
  <!-- ... This is the key part ... -->

</Project>

发布后,文件将成功上传到azure:

© www.soinside.com 2019 - 2024. All rights reserved.