Last active
April 19, 2025 07:41
-
-
Save Tocchann/327bd36c5fff7b3cb40242f1a0ac75b4 to your computer and use it in GitHub Desktop.
csproj, vcxproj で実際にバージョンを自動更新するための定義(SetupFileVersion.ps1とセットで使うw)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8" ?> | |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
<!-- FileVersion と、StartYear はあらかじめターゲットのプロジェクトで設定しておくこと --> | |
<Target Name="ValidateNeedGenerateVersionProperties"> | |
<Error Condition="'$(StartYear)' == ''" Text="プロパティ 'StartYear' が定義されていません。" /> | |
<Error Condition="'$(Version)' == '' and '$(FileVersion)' == ''" Text="プロパティ 'Version' か 'FileVersion' の定義が必要です。" /> | |
</Target> | |
<!--ビルド済みのバージョン情報を取得して、新しいバージョンを定義する PowerShell スクリプト。アウトプットを Item として取り込む--> | |
<Target Name="GenerateVersionDetail"> | |
<PropertyGroup> | |
<PreDefinedFileVersion>$(FileVersion)</PreDefinedFileVersion> | |
<PreDefinedFileVersion Condition="'$(PreDefinedFileVersion)' == ''">$(Version)</PreDefinedFileVersion> | |
</PropertyGroup> | |
<Message Text="StartYear: $(StartYear)" Importance="low" /> | |
<Message Text="Version: $(Version)" Importance="low" /> | |
<Message Text="FileVersion: $(FileVersion)" Importance="low" /> | |
<Message Text="PreDefinedFileVersion: $(PreDefinedFileVersion)" Importance="low" /> | |
<!--PowerShellスクリプトとして動かして、パスを取り込む(pwshにしてるけど、PowerShell のほうがほかの環境でも確実に動かせるか?)--> | |
<Exec Command="PowerShell –NonInteractive -ExecutionPolicy Unrestricted -Command $(MSBuildThisFileDirectory)SetupFileVersion.ps1 $(TargetPath) $(StartYear) $(PreDefinedFileVersion)" IgnoreExitCode="true" ConsoleToMsBuild="true"> | |
<Output ItemName="_FileVersions" TaskParameter="ConsoleOutput" /> | |
</Exec> | |
</Target> | |
<PropertyGroup> | |
<GenerateVersionDetailDependsOn> | |
ValidateNeedGenerateVersionProperties; | |
GenerateVersionDetail; | |
</GenerateVersionDetailDependsOn> | |
</PropertyGroup> | |
<!--SDK形式でのファイルバージョン定義を用意する--> | |
<Target Name="GenerateSdkReferFileVersion" BeforeTargets="PreBuildEvent" DependsOnTargets="$(GenerateVersionDetailDependsOn)" Condition="'$(NeedSdkFileVersion)' =='true'"> | |
<PropertyGroup> | |
<Version Condition="'$(Version)' == ''">$(PreDefinedFileVersion)</Version> | |
<FileVersion>@(_FileVersions, '.')</FileVersion> | |
</PropertyGroup> | |
<Message Text="FileVersion: $(FileVersion)" Importance="low" /> | |
</Target> | |
<!--VC++プロジェクト用のファイルバージョン定義を用意する。--> | |
<Target Name="GenerateCppReferFileVersion" BeforeTargets="PreBuildEvent" DependsOnTargets="$(GenerateVersionDetailDependsOn)" Condition="'$(NeedCppFileVersion)' =='true'"> | |
<PropertyGroup> | |
<CppFileVersionStr>@(_FileVersions, '.')</CppFileVersionStr> | |
<CppFileVersion>@(_FileVersions, ',')</CppFileVersion> | |
</PropertyGroup> | |
<Message Text="CppFileVersionStr: $(CppFileVersionStr)" Importance="low" /> | |
<Message Text="CppFileVersion: $(CppFileVersion)" Importance="low" /> | |
<CreateItem Include="#define VER_FILEVERSION $(CppFileVersion)"> | |
<Output ItemName="CppVersionInfoLines" TaskParameter="Include" /> | |
</CreateItem> | |
<CreateItem Include="#define VER_FILEVERSION_STR %22$(CppFileVersionStr)%22"> | |
<Output ItemName="CppVersionInfoLines" TaskParameter="Include" /> | |
</CreateItem> | |
<CombinePath BasePath="$(IntermediateOutputPath)" Paths="$(MSBuildProjectName).VersionInfo.h"> | |
<Output TaskParameter="CombinedPaths" PropertyName="CppVersionInfoFilePath" /> | |
</CombinePath> | |
<ReadLinesFromFile File="$(CppVersionInfoFilePath)" Condition="Exists('$(CppVersionInfoFilePath)')"> | |
<Output ItemName="Prior_CppVersionInfoLines" TaskParameter="Lines" /> | |
</ReadLinesFromFile> | |
<!--そのままルートに吐き出す--> | |
<WriteLinesToFile File="$(CppVersionInfoFilePath)" Lines="@(CppVersionInfoLines)" Overwrite="true" Condition="'@(CppVersionInfoLines)' != '@(Prior_CppVersionInfoLines)'" /> | |
</Target> | |
<!--AssemblyInfo.csのバージョン定義だけを自動生成する--> | |
<Target Name="GenerateVersionInfoCS" BeforeTargets="PreBuildEvent" DependsOnTargets="$(GenerateVersionDetailDependsOn)" Condition="'$(NeedNetfxFileVersion)' == 'true'"> | |
<PropertyGroup> | |
<FileVersion>@(_FileVersions, '.')</FileVersion> | |
</PropertyGroup> | |
<CreateItem Include='[assembly: System.Reflection.AssemblyVersion( "$(PreDefinedFileVersion)" )]'> | |
<Output ItemName="CsVersionInfoLines" TaskParameter="Include" /> | |
</CreateItem> | |
<CreateItem Include='[assembly: System.Reflection.AssemblyFileVersion( "$(FileVersion)" )]'> | |
<Output ItemName="CsVersionInfoLines" TaskParameter="Include" /> | |
</CreateItem> | |
<Message Text="CsVersionInfoLines: @(CsVersionInfoLines)" Importance="low" /> | |
<CombinePath BasePath="$(IntermediateOutputPath)" Paths="$(MSBuildProjectName).VersionInfo.cs"> | |
<Output TaskParameter="CombinedPaths" PropertyName="CsVersionInfoFilePath" /> | |
</CombinePath> | |
<ReadLinesFromFile File="$(CsVersionInfoFilePath)" Condition="Exists('$(CsVersionInfoFilePath)')"> | |
<Output ItemName="Prior_CsVersionInfoLines" TaskParameter="Lines" /> | |
</ReadLinesFromFile> | |
<!--変更が出る場合のみ更新する(呼ばれたらつくっちゃうけどね…)--> | |
<WriteLinesToFile File="$(CsVersionInfoFilePath)" Lines="@(CsVersionInfoLines)" Overwrite="true" Condition="'@(CsVersionInfoLines)' != '@(Prior_CsVersionInfoLines)'"/> | |
<ItemGroup> | |
<Compile Condition="Exists('$(CsVersionInfoFilePath)')" Include="$(CsVersionInfoFilePath)" /> | |
</ItemGroup> | |
</Target> | |
</Project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
C++向けの出力を$(IntermediateOutputPath) に $ (MSBuildProjectName).VersionInfo.h というファイル名で出力する形に変更したため、リソースの追加ディレクトリに $(IntermediateOutputPath) または $ (IntDir) を追加する必要があるので注意が必要。