我正在尝试在Visual Studio 2015中使用文件系统位置发布我的Web应用程序项目时创建一个Temp文件夹。我尝试在.csfile中添加以下代码,但它不是在目标位置创建文件夹发布目录。如果给定静态位置来创建文件夹,它的工作正常。如何动态获取发布目录?
<Target Name="CustomCollectFiles" AfterTargets="Build">
<MakeDir Directories="$(PublishDirectory)$(OutputDirectoryTemp)" />
</Target>
<PropertyGroup>
<OutputDirectoryTemp>\Temp\</OutputDirectoryTemp>
</PropertyGroup>
答案 0 :(得分:1)
使用MSBuild
发布时创建文件夹
您需要通过创建一个属性名称为PublishDirectory
元素子元素的元素来声明属性PropertyGroup
,因为没有这样的MSBuild宏,您可以检查{{3 }}
作为测试,我将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>
在输出窗口中,您将看到以下日志:
Common Macros for Build Commands and Properties
将创建文件夹Temp
:
如果您已经定义了PublishDirectory
的变量,则可以尝试使用输出命令行<Message Test="xxx" />
检查路径是否正确。
<强>更新强>
我想让发布目录的目标位置动态而非静态或硬编码
由于您希望获取发布目录动态的目标位置,我们知道,发布目录的位置存储在.pubxml
文件的节点{{ 1}},要动态获取此值,我们可以使用<publishUrl>D:\Publish\Test</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>
中,我们可以在该目标中获取它。
希望这有帮助。
答案 1 :(得分:0)
尝试在目标之前指定PropertyGroup,以确保它已创建。
同时检查PublishDirectory的值以确保它是一个有效的路径 - 我怀疑它可能带有&#34; \&#34;在它的最后,所以你最后得到两个斜杠