如何获取/设置MSDeploy(发布目标)制作的程序包的名称?

时间:2019-01-18 21:10:06

标签: .net msbuild msbuild-4.0

场景

使用下面的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

问题

如何获取/设置Archivewebsite的值,以便稍后可以在脚本中引用其中一个文件而无需对值进行硬编码?

脚本

<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="(?&lt;!currentdir)(%25)(?!currentdir)" Input="$(MSBuildProperties)" Replacement="%25$1">
        <Output TaskParameter="Output" PropertyName="MSBuildProperties"/>
    </RegexReplace>
    <!-- Escape special characters for batch file (^, &, <, >, |) -->
    <RegexReplace Expression="([\^&amp;&lt;&gt;\|])" 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的值吐出Archivewebsite一词,但是,不管名字叫什么,那当然会中断该属性是MSBuild用于获取此值更改或传递到某个地方的。但是,我想以最可靠的方式做到这一点。也就是说,如果有一个我可以引用的现有属性来获取/设置该名称,我想使用它。

0 个答案:

没有答案