使用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>
在输出窗口中,您将看到以下日志:
并创建文件夹Temp
:
如果已经定义了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 文件