Flash / Flex:将subversion修订版集成到exe / swf文件中?

时间:2011-04-15 11:24:35

标签: flash flex svn revision

我最近跟着this great guide将subversion版本集成到我的c ++ / c#visual studio项目生成的exe / dll文件中。现在,我可以轻松地右键单击exe文件,找到用于构建二进制文件的修订版本(参见下图)。我喜欢这个功能。

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

Details with svn revision information http://www.zachburlingame.com/wp-content/uploads/2011/03/c_svn_autoversion_version_info.png


使用解决方案进行更新:

虽然这里提供的基于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>

2 个答案:

答案 0 :(得分:4)

我实际上是想自己做这件事,所以我想我会调查一下。我用ANT和mxmlc来做我的构建。以下是我发现here获取修订号的ANT代码段:。

<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 compilatio n。

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

让我知道这种方法是否适合你,所以我可以自己使用= D

答案 1 :(得分:1)

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

我的build.xml中的一个片段:它使用两个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”,表明它不一定是从代码的提交版本构建的。