0

我有一个ClickOnce应用程序,它有几个“模式”。我创建了一个 MSBuild 脚本,它在文件(C#/Visual Studio 项目文件)和文件上使用XSL转换来为应用程序将部署到的不同环境设置配置参数。.csprojapp.config

脚本中的步骤是构建该软件的所有Office版本,其中有三个,分别转换app.config.csproj文件。之后,它将对软件的卡车版本执行相同的操作并发布它们。这全部发布到本地文件夹,然后压缩到我们发送给客户端的ZIP文件中。

我已经完成了所有这些工作,但是我现在遇到的问题是 .application 文件中的应用程序名称以某种方式被发布过程缓存了。因此,所有“卡车”版本在publish.htm页面上都显示为 Mobile,但是当我们单击安装链接时,它会在弹出的安装对话框中显示Office版本。

当我在文本编辑器中检查卡车版本.application文件时,我看到以下部署标签:

<description co.v1:suiteName="Prover"
             asmv2:product="Prover Office"
             xmlns="urn:schemas-microsoft-com:asm.v1" />

这表明发布操作可能会以某种方式缓存我的产品名称,而不是正确更改它。

我尝试更改发布操作的顺序以首先发布卡车版本,在这种情况下,产品标签将在所有 Office 版本上显示 Prover Truck。

我已经厌倦了在每次发布之前使用 RemoveDir 命令来清除项目内部的 /bin 文件夹,以确保没有任何内容以这种方式被缓存。但这并没有解决问题。

被调用的目标如下所示:

<Target Name="EnbridgeOfficeDevPublish"
        AfterTargets="JDPOfficePublish"
        DependsOnTargets="CreatePublishDir;">

    <RemoveDir Directories="$(MSBuildProjectDirectory)\EBPMND_Prover\Bin"/>

    <!--Transform .csproj file-->
    <XslTransformation
        XslInputPath="$(MSBuildProjectDirectory)\Deployment\OfficeCSProj.xslt"
        XmlInputPaths="$(MSBuildProjectDirectory)\EBPMND_Prover\EBPMND_Prover.csproj"
        OutputPaths="$(MSBuildProjectDirectory)\EBPMND_Prover\EBPMND_Prover.transformed"
        Parameters="&lt;Parameter Name='ApplicationVersion' Value='$(Version)'/&gt;"/>
    <Copy SourceFiles="$(MSBuildProjectDirectory)\EBPMND_Prover\EBPMND_Prover.transformed"
                DestinationFiles="$(MSBuildProjectDirectory)\EBPMND_Prover\EBPMND_Prover.csproj"
                OverwriteReadOnlyFiles="true" />
    <Delete Files="$(MSBuildProjectDirectory)\EBPMND_Prover\EBPMND_Prover.transformed"/>

    <!--Transform app.config-->
    <XslTransformation
        XslInputPath="$(MSBuildProjectDirectory)\Deployment\OfficeDevAppConfig.xslt"
        XmlInputPaths="$(MSBuildProjectDirectory)\EBPMND_Prover\app.config"
        OutputPaths="$(MSBuildProjectDirectory)\EBPMND_Prover\app.config.transformed"/>
    <Copy
        SourceFiles="$(MSBuildProjectDirectory)\EBPMND_Prover\app.config.transformed"
        DestinationFiles="$(MSBuildProjectDirectory)\EBPMND_Prover\app.config"
        OverwriteReadOnlyFiles="true" />
    <Delete Files="$(MSBuildProjectDirectory)\EBPMND_Prover\app.config.transformed"/>

    <MSBuild
        Projects="EBPMND_Prover\EBPMND_Prover.csproj"
        Properties="Configuration=Release;InstallUrl=http://houvwebd/Prover/;PublishDir=$(PublishDir)\OfficeDev\;ApplicationVersion=$(Version)"
        Targets="Publish"/>
    <Message Text="------Dev Office Publish Completed-----"/>
</Target>

XSL 文件非常简单。.csproj这是XSL 文件的示例。

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="build:PropertyGroup/build:ProductName">
    <ProductName>Prover Truck</ProductName>
</xsl:template>

<xsl:template match="build:PropertyGroup/build:InstallUrl">
    <InstallUrl>http://houvwebd/Prover/Truck/</InstallUrl>
</xsl:template>

<xsl:template match="build:PropertyGroup/build:PublishUrl">
    <PublishUrl>D:\Projects\PrecompiledWeb\Prover\Truck\</PublishUrl>
</xsl:template>

<xsl:template match="build:PropertyGroup/build:CreateDesktopShortcut">
    <CreateDesktopShortcut>true</CreateDesktopShortcut>
</xsl:template>

<xsl:template match="build:ApplicationVersion">
    <ApplicationVersion>
        <xsl:value-of select="$ApplicationVersion"/>
    </ApplicationVersion>
</xsl:template>

<xsl:template match="build:PropertyGroup/build:Install">
    <Install>True</Install>
</xsl:template>

<xsl:template match="build:SignManifests">
    <SignManifests>false</SignManifests>
</xsl:template>

我该如何解决这个问题?

4

1 回答 1

0

在这种情况下,我最终制作了多个 msbuild 文件,并在将新版本提交给 VCS 时让我们的集成服务器相互独立地构建它们。我仍然没有弄清楚这些设置在哪里或为什么要缓存,但至少我现在有一个解决方案。

于 2013-07-11T18:19:02.200 回答