我在 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 的内容中?有谁能够让这个概念发挥作用吗?
在您的情况下,
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: