使用MSBuild发布时创建文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用MSBuild发布时创建文件夹相关的知识,希望对你有一定的参考价值。

我正在尝试使用Visual Studio 2015中的文件系统位置发布我的Web应用程序项目时创建Temp文件夹。我尝试在.csfile中添加以下代码,但不是在发布目录的目标位置中创建文件夹。如果给定静态位置来创建文件夹,它的工作正常。如何动态获取发布目录?

<Target Name="CustomCollectFiles" AfterTargets="Build">
    <MakeDir Directories="$(PublishDirectory)$(OutputDirectoryTemp)" />
  </Target>
  <PropertyGroup>   
    <OutputDirectoryTemp>Temp</OutputDirectoryTemp> 
  </PropertyGroup>
答案

使用MSBuild发布时创建文件夹

你需要通过创建一个属性名称作为PublishDirectory元素子元素的元素来声明属性PropertyGroup,因为没有这样的MSBuild宏,你可以检查Common Macros for Build Commands and Properties

作为测试,我将PublishDirectory设置为路径D:Publish

  <PropertyGroup>
    <PublishDirectory>D:Publish</PublishDirectory>
  </PropertyGroup>

然后我在目标中添加输出命令行<Message Test="xxx" />以输出$(PublishDirectory)$(OutputDirectoryTemp)的内容:

  <Target Name="CustomCollectFiles" AfterTargets="Build">
    <MakeDir Directories="$(PublishDirectory)$(OutputDirectoryTemp)" />

    <Message Text="$(PublishDirectory)$(OutputDirectoryTemp)">
    </Message>
  </Target>
  <PropertyGroup>
    <OutputDirectoryTemp>Temp</OutputDirectoryTemp>
  </PropertyGroup>

  <PropertyGroup>
    <PublishDirectory>D:Publish</PublishDirectory>
  </PropertyGroup>

在输出窗口中,您将看到以下日志:

enter image description here

并创建文件夹Temp

enter image description here

如果已经定义了PublishDirectory的变量,则可以尝试使用输出命令行<Message Test="xxx" />检查路径是否正确。

更新:

我想动态地获取发布目录的目标位置,而不是静态或硬编码

由于您想要动态获取发布目录的目标位置,如我们所知,发布目录的位置存储在.pubxml文件中,在节点<publishUrl>D:PublishTest</publishUrl>中,为了动态获取此值,我们可以使用$(publishUrl)来获取此值在目标中,但是,发布过程是在构建之后,我们无法在构建过程中获得此值,因此我们需要将此目标的顺序从AfterTargets="Build"更改为AfterTargets="PipelineTransformPhase"。目标应该是:

  <Target Name="CustomCollectFiles" AfterTargets="PipelineTransformPhase">
    <MakeDir Directories="$(publishUrl)$(OutputDirectoryTemp)" />
    <Message Text="$(publishUrl)$(OutputDirectoryTemp)" />
  </Target>
  <PropertyGroup>
    <OutputDirectoryTemp>Temp</OutputDirectoryTemp>
  </PropertyGroup>

在这种情况下,当您将项目发布到系统位置时,发布目录将存储在publishUrl中,我们可以在该目标中获取它。

希望这可以帮助。

另一答案

尝试在目标之前指定PropertyGroup,以确保它已创建。

还要检查PublishDirectory的值以确保它是一个有效的路径 - 我怀疑它的末尾可能带有一个“”,所以你最后会得到两个斜杠

以上是关于使用MSBuild发布时创建文件夹的主要内容,如果未能解决你的问题,请参考以下文章

obj 目录中的 *.dll.licenses 文件不是使用 TeamCity 中的 msbuild 创建的

msbuild 错误 MSB3191:在远程服务器中发布时无法创建目录

如何在 Azure Devops 中使用 msbuild 创建具有发布和调试配置的 nuget 文件

使用 SonarQube Scanner for MSBuild 控制模块名称

禁用代码分析输出 MSBuild

MSBuild 忽略发布配置文件配置