首页 > 解决方案 > Azure DevOps MSBuild 在构建期间重命名文件

问题描述

我有一个名为 _app_offline.htm 的文件,我正在使用 MSBuild 将其重命名为 app_offline.htm。这是一个老式的 asp.net 网站,因此 MSBuild 使用的是 website.publishproj:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" InitialTargets="RenameAppOffline">
  <ItemGroup Condition="'$(Configuration)' == 'Release'">
    <RenameFile Include="_app_offline.htm" />
  </ItemGroup>
  <Import Project="$(_WebPublishTargetsPath)\Web\Microsoft.WebSite.Publishing.targets" />

  <Target Name="RenameAppOffline">
    <Message Text="Rename: @(RenameFile) -> @(RenameFile -> Replace('_app_offline', 'app_offline'))" Importance="High" />
    <Move SourceFiles="@(RenameFile)" DestinationFiles="@(RenameFile -> Replace('_app_offline', 'app_offline'))" />
  </Target>
  
</Project>

命令是:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"

在构建日志中,我可以看到:

将文件从“_app_offline.htm”移动到“app_offline.htm”。

当我下载工件时,_app_offline.htm 不存在,但是 app_offline.htm 也不存在且未部署。

我的问题是为什么缺少 app_offline.htm 以及如何将其添加到工件中?

编辑 2020-06-29:

我更新了 RenameAppOffline 如下:

<Target Name="RenameAppOffline" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy" Condition="'$(Configuration)' == 'Release'">
    <Message Text="Rename: @(RenameFile) -> @(RenameFile -> Replace('_', ''))" Importance="High" />
    <Copy SourceFiles="@(RenameFile)" DestinationFiles="@(RenameFile -> Replace('_', $(_PackageTempDir)\))" OverwriteReadOnlyFiles="true" />
</Target>

这解决了我的问题

标签: azure-devopsmsbuildazure-pipelines

解决方案


从其他各种 StackOverflow 问题中,我能够拼凑出以下解决方案:

<Target Name="RenameAppOffline" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy" Condition="'$(Configuration)' == 'Release'">
    <Message Text="Rename: @(RenameFile) -> @(RenameFile -> Replace('_', ''))" Importance="High" />
    <Copy SourceFiles="@(RenameFile)" DestinationFiles="@(RenameFile -> Replace('_', $(_PackageTempDir)\))" OverwriteReadOnlyFiles="true" />
</Target>

次要挑战之一是了解可用的环境变量 - 将以下内容添加到 MSBuild 命令提供了我需要的所有信息:

-v:diag

推荐阅读