この回答は、Azure Build Pipelineを使用し、 BuildId値をアセンブリ バージョンの最後の番号として挿入したいが、の値が大きすぎるという問題がある人向けBuildId
です。(> 65535)
私の解決策は、ファイルに挿入されるの最後の 4 桁または 5 桁を使用することです。
バージョン番号がBuildIdとはまったく異なるように見えるため(制限に達した後)、モジュロ演算は使用しません。代わりに、私のソリューションでは、「短縮された」バージョンは BuildId に似ています。BuildId
AssemblyInfo.cs
例:
はで、は 333AssemblyVersion
です。 --> 新しい AssemblyVersion は になります。(少数でも問題ありません。 )1.0.0.0
BuildId
1.0.0.333
はAssemblyVersion
で1.0.0.0
、BuildId
は 55555 です。
--> 新しい AssemblyVersion は になり1.0.0.55555
ます。(まだ範囲内です。 )
はAssemblyVersion
で1.0.0.0
、BuildId
は 66666 です。
--> 新しい AssemblyVersion は になり1.0.0.6666
ます。(下 4 桁を使用します。それ以上は使用できません。 )
はAssemblyVersion
で1.0.0.0
、BuildId
は 111111 です。
--> 新しい AssemblyVersion は になり1.0.0.11111
ます。(下 5 桁を使用します。 )
次の手順で簡単に使用できます
ステップ 1:shortBuildId
このスニペットを使用して、パイプラインで変数を定義します。
variables:
- name: shortBuildId # note: The last 4 or 5 digits of the BuildId, because for the assembly version number the maximum value is 65535
value: '[not set]' # will be set by powershell script
あるいは、このように定義することもできます。既存の変数をどのように定義したかは、スタイルによって異なります。
variables:
shortBuildId: '[not set]'
ステップ 2:これらのタスクを既存のタスクの上に挿入します。
最初のタスクは短い BuildId を作成し、 variable に保存しますshortBuildId
。
2 番目のタスクは、ファイルの 4 番目のバージョン フィールドを更新しますAssemblyInfo.cs
。AssemblyVersion
したがって、短い buildId がと の両方に注入されAssemblyFileVersion
ます。
注: このファイルには、4 つの数字 (例: ) を持つアセンブリ バージョンが必要です1.0.0.0
。数字が 3 つしかない場合 (例: 1.0.0
)、機能しません。
- task: PowerShell@2
displayName: Define short build ID
# If allowed, use the last 5 digits. If they are larger than 65000, use the last 4 digits. Leading zeros are removed.
# This is needed, because the full build ID can't be used as number for the assembly version.
inputs:
targetType: 'inline'
script: |
$shortId = $env:BUILD_BUILDID
$shortId = $shortId % 100000
if ($shortId -gt 65000) { $shortId = $shortId % 10000 }
Write-Host "Build ID: $env:BUILD_BUILDID --> $shortId"
Write-Host "##vso[task.setvariable variable=shortBuildId]$shortId"
showWarnings: true
- task: RegexReplace@3
displayName: Insert shortBuildId into AssemblyInfo:
InputSearchPattern: 'myProjectDirectory\Properties\AssemblyInfo.cs'
FindRegex: '(\[assembly: (AssemblyVersion|AssemblyFileVersion)\("\d+\.\d+\.[0-9*]+)\.[0-9*]+("\)\])'
ReplaceRegex: '$1.$(shortBuildId)$3'
UseUTF8: true
UseRAW: true
ステップ 3 : プロジェクトに関連する 2 番目のタスクのパスを調整します。
の値を編集しますInputSearchPattern
。ソリューションのすべてのプロジェクトに
shortBuildId を挿入する場合は、次のように記述します。InputSearchPattern: '**\AssemblyInfo.cs'
クレジット
Edmund Weitz 博士の素晴らしいツールであるThe Regex Coachに感謝します。このツールは無料で使用できます。