2011-04-15 74 views
1

我最近跟着this great guide將顛覆版本整合到我的C++/c#visual studio項目中生成的exe/dll文件中。現在,我可以輕鬆地右鍵單擊一個exe文件來查找哪個版本用於構建二進制文件(請參閱下圖)。我喜歡這個功能。Flash/Flex:將subversion版本集成到exe/swf文件中?

在建立空氣/獨立應用程序時,這是否可以在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順利文件(在我看來),它解決了我的問題,現在在我們的製作中實施。 我的設置基於凱文和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

這可能無法直接執行......但您可以使用AIR中默認集成的這種超酷自動觸發功能http://gregsramblings.com/2008/08/16/adding-auto-update-features-to-your應用程序在3簡單步驟/ – Neeraj 2011-04-15 11:27:50

+0

Incase你覺得這是正確的事情。請讓我把它作爲答案並標記爲正確。 – Neeraj 2011-04-15 11:28:11

+0

謝謝你的回覆Neeraj。雖然這確實是一個很好的功能,但它與我當前的配置不匹配,並且在我的設置中實現不會很容易。我感謝您的評論,稍後我會深入研究它,但它並不直接幫助我。如果你把它變成答案,我會給你一個投票:) – 2011-04-15 11:36:02

回答

1

我們用下面的方法(和它的相當類似凱文的答案,但我可以肯定,它的工作原理):

從我的build.xml代碼片段:這使用兩個jar文件(svnkit和svntask),而不是svn.exe(所以它運行跨平臺) - 這些罐子也通過svn檢入,所以你不能失去它們或misinstall 。

<!-- 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}[email protected]{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',表明它不一定是從代碼的提交版本構建的。

+0

坦率地說,非常感謝您的答覆。經過一些調整後,我使用的是基於SubWCrev的解決方案,但在其他方面與您的相似(發佈在我的問題中)。謝謝! – 2011-06-13 12:19:55

4

實際上,我是希望這樣做我自己,所以我想通我會調查它。我使用ANT和mxmlc來完成我的構建。這裏是一個ANT片段,我發現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 compilatio

我還沒有找到通過編程方式設置AIR應用程序描述符的方法,因此您可能必須在編譯之前通過ANT編輯/創建XML描述符文件。

讓我知道如果這個方法對你的作品,所以我可以用它自己= d

+0

你不能使用'get HEAD revnum',因爲它可能不匹配您正在構建的代碼版本(例如,如果某人在您之後進行了檢查)。使用SubWCRev來獲得您正在構建的工作副本的更新。 – gbjbaanb 2011-04-15 12:49:34

+0

凱文,非常感謝你的回答。隨着frankhermes的增加下面,它或多或少是一個完整的解決方案。不幸的是,我不能接受多於一個的答案,但至少你得到了我的投票。再次感謝ypour的智慧! – 2011-06-13 12:17:32

相關問題