MSBuild / Delphi 2010 を使用して EXE をコンパイルしようとしています。
MSBuild.exe /t:Clean;Build /p:config=Release;ExtraDefines="CodeTest" /property:FileVersion=1.0.0.15 "D:\MyProject\MyFile.dproj"
ファイルはビルドされていますが、バージョンが設定されていません
とにかく何が問題なのですか?
MSBuild / Delphi 2010 を使用して EXE をコンパイルしようとしています。
MSBuild.exe /t:Clean;Build /p:config=Release;ExtraDefines="CodeTest" /property:FileVersion=1.0.0.15 "D:\MyProject\MyFile.dproj"
ファイルはビルドされていますが、バージョンが設定されていません
とにかく何が問題なのですか?
プロパティ「FileVersion」はMSBuildセッション内で使用できますが、それを何らかの方法で使用するタスクまたはターゲットがない限り、何にも使用されていません。(DHeffernanが言うように)コードが使用するバージョンリソースを作成するか、コンパイル後のツールを使用してバージョン情報をexeまたはdllに適用する必要があります。
このStackOverflowの記事には、コンパイル後の処理を実行するためのツールがいくつかリストされています。
ここでの主な問題は、FileVersion
「属性」がVerInfo_Keys
プロパティの CSV リストの一部であり、プロパティ自体ではないことです。
だから、私に見られる解決策は次のとおりです。
VersInfo_Keys
の取得 (CSV リスト)これをMSBuild Inline Taskで実装しました(注意: .NET Framework 4.0 以降を使用する必要があります)。
要点(上記)をlib\MSBuildTasks\Delphi.VersionInfo.targets
ファイルに入れます(私の場合はgitサブモジュール)
Delphi プロジェクト ファイルに追加します (例delphi-project.dproj
: )。
<Import Project="lib\MSBuildTasks\Delphi.VersionInfo.targets" Condition="$(FileVersion)!='' and Exists('lib\MSBuildTasks\Delphi.VersionInfo.targets')"/>
「FileVersion が設定されている」という条件は、Delphi がインライン タスクをサポートしていない .NET 3.5 を使用しているため、Delphi での失敗を回避するためのものです (したがって、FileVersion は MSBuild で実行した場合にのみ設定されます)。
走る
msbuild delphi-project.dproj /t:build /p:FileVersion=A.B.C.D
Android アプリにも同じものを使用します (Delphi XE7/10 Seattle を使用)。というよりもVersionName
、VersionCode
「プロパティ」をそのまま使用しますFileVersion
(NBImport
の条件は適切に変更されます)。
msbuild delphi-project.dproj /t:build /p:VersionName=A.B.C.D