我最近跟着this great guide将subversion版本集成到我的c ++ / c#visual studio项目生成的exe / dll文件中。现在,我可以轻松地右键单击exe文件,找到用于构建二进制文件的修订版本(参见下图)。我喜欢这个功能。
在构建空气/独立应用程序时,是否可以在flash / flex中执行相同操作?我想标记exe文件和dll。
使用解决方案进行更新:
虽然这里提供的基于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>
答案 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”,表明它不一定是从代码的提交版本构建的。