【问题标题】:Flash/Flex: Integrating subversion revision into exe/swf file?Flash/Flex:将颠覆修订版集成到 exe/swf 文件中?
【发布时间】:2011-04-15 11:24:34
【问题描述】:

我最近关注this great guide 将颠覆修订版集成到从我的 c++/c# Visual Studio 项目生成的 exe/dll 文件中。现在我可以轻松地右键单击一个 exe 文件以查找用于构建二进制文件的修订版(见下图)。我喜欢这个功能。

在构建空中/独立应用程序时,是否可以在 flash/flex 中执行相同的操作?我想标记 exe 文件和 dll。


(来源:zachburlingame.com


更新解决方案:

虽然这里提供的基于 ANT 的解决方案不如将 svn 信息刻录成 .exe/.dll 文件的解决方案顺利(在我看来),但它解决了我的问题,现在在我们的产品中实现. 我的设置基于 Kevin 和 frankhermes 的回答,但使用 SubMCRev.exe 而不是 svn.exe 或 jar 文件。

在我们的实现中,我们在启动时将 svn 修订版转储到日志文件中。下面 SVN 目标的输出如下所示:

Built with SVN Revision: 1.0.0.1181 (local modifications found)

SVN 目标:

<target name="SVN Revision">
        <exec executable="subWCRev.exe" outputproperty="revision">
            <arg value="${basedir}\\.." />
            <redirector>
                <outputfilterchain>
                    <linecontainsregexp>
                        <regexp pattern='^([Last]|[Local])' />
                    </linecontainsregexp>
                    <tokenfilter>
                        <replaceregex pattern='[\D]+([\d]+)' replace="Built with SVN Revision: 1.0.0.\1" />
                        <replaceregex pattern='Local modifications found' replace=" (local modifications found)" />
                    </tokenfilter>
                    <striplinebreaks />
                </outputfilterchain>
            </redirector>
        </exec>
    </target>

编译目标:

<target name="compile" depends="init, SVN Revision">
        <mxmlc file="..." output="...">
            <define name="compile::REVISION" value="'${revision}'" />
        ....        
        </mxmlc>
    </target>

【问题讨论】:

  • 这可能无法直接实现...但是您可以使用默认集成在 AIR 中的这个很酷的自动更新功能 gregsramblings.com/2008/08/16/…
  • 如果你觉得这是正确的。请让我将其作为答案并将其标记为正确。
  • 感谢 Neeraj 的回答。虽然这确实是一个不错的功能,但它与我当前的配置不匹配,并且在我的设置中实现它不会毫不费力。感谢您的评论,稍后我会更深入地研究它,但这并不能直接帮助我。如果你把它变成一个答案,我会给你一个投票:)
  • 嘿..我得到了你要找的东西,虽然这可能不是自动的......在你的 src 文件夹下会有一个名为 .xml 的文件,例如让我们说你的项目名为“myproject”,那么在您的 src 文件夹中会有一个文件 myproject.xml(不是 mxml 而是 xml),这里有各种属性,如版本、名称等您可以配置,这可能反映在安装 .air 后生成的 .exe 文件。我不确定,但这似乎会在结果文件的属性中放置一个版本。
  • 你可以在这里livedocs.adobe.com/flex/3/html/…获得更多细节

标签: flash apache-flex svn revision


【解决方案1】:

我实际上是想自己做这件事,所以我想我会调查一下。我使用 ANT 和 mxmlc 进行构建。这是我找到的一个 ANT sn-p here 以获取修订号:。

<target name="find_revision" description="Sets property 'revision.number' to the head svn revision">
        <property name="revision" value="HEAD"/>

        <!-- find out revision number of HEAD, need svn.exe installed on local machine -->
   <exec executable="svn" outputproperty="revision.number">
        <arg line="info -r ${revision}"/>
        <redirector>
           <outputfilterchain>
              <linecontainsregexp>
                 <regexp pattern='^Revision' />
              </linecontainsregexp>
              <tokenfilter>
                <replaceregex pattern='[\D]+([\d]+)' replace="\1" />
              </tokenfilter>
           </outputfilterchain>
        </redirector>
   </exec>
</target>

找到修订号后,可以在编译时将变量作为全局常量传递。这是通过mxmlc parameter: 完成的。

 define=NAMESPACE::variable,value

可以在 AS3 中检索此变量并以您想要的任何方式使用。详情请见using conditional compilation。

我还没有找到以编程方式设置 AIR 应用程序描述符的方法,因此您可能必须在编译之前通过 ANT 编辑/创建 XML 描述符文件。

让我知道这个方法是否适合你,以便我自己使用它=D

【讨论】:

  • 您不能使用“get HEAD revnum”,因为它可能与您正在构建的代码版本不匹配(例如,如果有人在您之后签入某些东西)。使用 SubWCRev 来获取您正在构建的工作副本的 revnum。
  • 凯文,非常感谢您的回答。加上下面的 frankhermes,它或多或少是一个完整的解决方案。不幸的是,我不能接受一个以上的答案,但至少你在你的帖子上得到了我的投票。再次感谢您的智慧!
【解决方案2】:

我们使用以下方法(这与凯文的回答非常相似,但我可以确认它有效):

我的 build.xml 中的一个 sn-p:它使用两个 jar 文件(svnkit 和 svntask)而不是 svn.exe(因此它可以跨平台运行) - 这些 jar 也是通过 svn 签入的,所以你不能丢失或安装错误。

<!-- SVN revision stuff -->
<typedef resource="com/googlecode/svntask/svntask.xml">
    <classpath>
        <fileset dir="${basedir}/util">
            <include name="svnkit.jar"/>
            <include name="svntask.jar"/>
        </fileset>
    </classpath>
 </typedef>

<target name="revision">
    <svn><info path="${basedir}" revisionProperty="revision" /></svn>
    <echo>${revision}</echo>
</target>
<!-- /SVN revision stuff -->

现在我们在 mxmlc 任务中作为条件编译器变量包含在一个属性中的修订:

        <mxmlc file="${src.dir}/@{appfile}.@{ext}"
            output="@{output}/@{appfile}.swf"
            debug="@{debug}"
            target-player="${version_major}"
            optimize="true"
            locale=""
            use-network="true"
        >
            <define name="compile::REVISION" value="'${revision}'"/>
            [... rest snipped]
        </mxmlc>

那么就可以在AS中使用那个变量了:

var version:String = "1.0."+compile::REVISION;

要使代码也能在 Flash Builder 中运行,您必须将以下行添加到您的附加编译器参数中:

-define+=compile::REVISION,'dev' 

这样您的开发代码将具有修订版“dev”,这表明它不一定是从代码的提交版本构建的。

【讨论】:

  • 坦率地说,非常感谢您的回答。经过一些调整后,我正在使用基于 SubWCrev 但与您的类似的解决方案(在我的问题中发布)。谢谢!
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2011-05-01
  • 2023-01-11
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
相关资源
最近更新 更多