使用下面的MSBuild XML进行发布(网站,而不是Web Project)时,PackageAsSingleFile
参数为false
时,该版本会以所有文件(以及它们所在的文件夹)为前缀与Archive
:
Archive\
Archive.deploy.cmd
Archive.deploy-readme.txt
Archive.SetParameters.xml
Archive.SourceManifest.xml
当PackageAsSingleFile
参数为true
时,内部版本会为所有以website
开头的文件命名:
website.zip
website.deploy.cmd
website.deploy-readme.txt
website.SetParameters.xml
website.SourceManifest.xml
如何获取/设置Archive
或website
的值,以便稍后可以在脚本中引用其中一个文件而无需对值进行硬编码?
<Target Name="Publish" DependsOnTargets="CopyWebSiteReferences" Condition="'$(SkipPublish.ToLower())' != 'true'">
<PropertyGroup>
<MSBuildProperties>Configuration=$(Configuration)</MSBuildProperties>
<MSBuildProperties>$(MSBuildProperties);PublishProfile=$(PublishProfile)</MSBuildProperties>
<MSBuildProperties>$(MSBuildProperties);DeployOnBuild=true</MSBuildProperties>
<MSBuildProperties>$(MSBuildProperties);PackageAsSingleFile=false</MSBuildProperties>
<!-- More properties not shown -->
</PropertyGroup>
<!-- Escape % characters for batch file, unless they surround %currentdir% -->
<RegexReplace Expression="(?<!currentdir)(%25)(?!currentdir)" Input="$(MSBuildProperties)" Replacement="%25$1">
<Output TaskParameter="Output" PropertyName="MSBuildProperties"/>
</RegexReplace>
<!-- Escape special characters for batch file (^, &, <, >, |) -->
<RegexReplace Expression="([\^&<>\|])" Input="$(MSBuildProperties)" Replacement="^$1">
<Output TaskParameter="Output" PropertyName="MSBuildProperties"/>
</RegexReplace>
<!-- Escape ; character for MSBuild output -->
<RegexReplace Expression="%3B" Input="$(MSBuildProperties)" Replacement="%3B">
<Output TaskParameter="Output" PropertyName="MSBuildProperties"/>
</RegexReplace>
<Message Text="MSBuildProperties: $(MSBuildProperties)"/>
<MSBuild
Projects="$(WebSiteDir)\website.publishproj"
ContinueOnError="false"
Properties="$(MSBuildProperties)"/>
</Target>
在搜索答案并显示为空后,我尝试在父MSBuild文件中打开详细日志记录,但是显然,这是在website.publishproj
调用内部发生的。为了将<Exec>
参数传递为shown here,我花了很多时间试图构造对MSBuild.exe
的{{1}}调用(让它运行没有错误是时间。消费),并简要研究了MSBuild Loggers,但这是要解决这个简单问题的答案还有很长的路要走!
我知道我可以做一些条件逻辑,并根据/v:Diag
的值吐出Archive
或website
一词,但是,不管名字叫什么,那当然会中断该属性是MSBuild用于获取此值更改或传递到某个地方的。但是,我想以最可靠的方式做到这一点。也就是说,如果有一个我可以引用的现有属性来获取/设置该名称,我想使用它。