2012-04-20 8 views
1

私はMSBuildの/デルファイ2010を使用してEXEをコンパイルしようとしている、私はこれを試してみました:MSBuildを使用してEXEをビルドする場合のファイルバージョンの指定方法は?

からMSBuild.exe/T:クリーン、ビルドします/ P:設定=リリース; ExtraDefines = "CodeTest" /プロパティ:ファイルバージョン= 1.0.0.15 "D:\ MyProjectと\ MyFile.dproj"

ファイルが構築されていますが、バージョンはとにかく間違って何

に設定されていませんか?

+1

私は、ビルド前のイベントとして実行され、目的のバージョンとバージョンリソースを作成するPerlスクリプトを持っています。 –

+2

"/ property"はMSBUILDのversioninfoプロパティを設定しているとは思わない。それらはDebugやReleaseを設定するのに使われます。/pと/ propertyは同じコマンドの2つの形式に過ぎないことに注意してください。 –

+0

ありがとう、私は本当にverpatchを使って終わった – TheDude

答えて

3

プロパティ "FileVersion"はMSBuildセッション内で使用できますが、何らかの形でそれを使用するタスクやターゲットがないと、何も使用されていません。あなたは、あなたのコードが使用するバージョンリソースを作成するか、またはポストコンパイルツールを使用してバージョン情報をEXEまたはDLLに適用する必要があります(DHeffernanによると)。

このStackOverflow articleには、コンパイル後の作業を行うためのツールが多数掲載されています。

0

ここでの主な問題は、FileVersion属性がCSV-listの一部であり、プロパティーではありませんが、プロパティー自体ではありません。

だから、私に見られている解決策は次のとおりです。

  1. は、key = valueのペアにの
  2. 変更値をVersInfo_Keysプロパティ(CSV-リスト)
  3. スプリットそれを取るファイルバージョン= ...ペア
  4. リストに戻ると、CSV-listに戻ります。

私はMSBuild Inline Task(NB:.NET Frameworkの4.0以降を使用する必要があります):でimplementedこれをしました

  1. 私の中lib\MSBuildTasks\Delphi.VersionInfo.targetsファイル(gitのサブモジュールに(上記気づい)要旨を入れてケース)
  2. Delphiのプロジェクトファイル(たとえばdelphi-project.dproj)に追加:

    <Import Project="lib\MSBuildTasks\Delphi.VersionInfo.targets" Condition="$(FileVersion)!='' and Exists('lib\MSBuildTasks\Delphi.VersionInfo.targets')"/>

    条件「FILEVER Delphiで失敗するのを避けるためです。後者はインラインタスクをサポートしていない.NET 3.5を使用するためです(FileVersionはMSBuildで実行する場合のみ設定されます)。

  3. 実行

    msbuild delphi-project.dproj /t:build /p:FileVersion=A.B.C.D

私は(デルファイXE7/10シアトルで)Androidアプリのために使用するのと同じ。 FileVersionではなく、VersionNameVersionCodeが使用されます(N.B. Importの条件が適切に変更されています)。

msbuild delphi-project.dproj /t:build /p:VersionName=A.B.C.D