概要
0_RunAll.ps1 の結果を、そのまま合否として読めない。
1_BuildAll.ps1 には -IgnoreErrors があり、既知のエラー(ClickOnce の署名)を
合否判定から外せる。0_RunAll.ps1 にはそれを渡す口が無い。
このため 0_RunAll.ps1 を回すと、環境に由来する既知のエラーで必ず 1 本が NG になる。
現状
.\0_RunAll.ps1 -Lang Both
================ 全体のまとめ ================
スクリプト 終了コード
----------------- ----------
1_BuildAll.ps1 1 ← 既知の MSB3482 だけで NG
2_RunAllTests.ps1 0
3_SmokeTest.ps1 0
1 本が 0 以外で終了しました。上のログを確認してください。
エラーの中身はこれ 1 件だけである。
[WSClnt_sample (net48)] error MSB3482: 署名中にエラーが発生しました:
WSClientWinCone_sample.exe の署名に失敗しました。
SignTool Error: No certificates were found that met all the given criteria.
WSClientWinCone_sample.csproj は ClickOnce のマニフェスト署名が有効で、
証明書の拇印を直接指定している。 その証明書が無い環境では必ず失敗する
(BUILDING.md 4 節に記載済み)。
1_BuildAll.ps1 を直接呼ぶ場合は、これを除外して回せる。
.\1_BuildAll.ps1 -IgnoreErrors 'error MSB(3482|3325|3321):.*WSClientWinCone_sample\.csproj'
0_RunAll.ps1 にはこの口が無いため、同じことができない。
何が困るか
- 「NG が 1 本ある」が常態になり、本物の失敗と見分けが付かない。
結局ログを開いて中身を読むことになる
- 現状の
0_RunAll.ps1 は、この状況をコメントで説明しているだけである
# 1_BuildAll.ps1 は既知の署名エラー(MSB3482)で 1 になることがある。
# 終了コードだけで判断せず、エラー一覧の内容を確認すること(RELEASE.md 3 節)。
説明で回避するのではなく、判定できるようにしたい。
対応
0_RunAll.ps1 に -IgnoreErrors を足し、既定でこの既知エラーを渡す。
param(
[ValidateSet("CS", "VB", "Both")]
[string]$Lang = "CS",
[string[]]$IgnoreErrors = @('error MSB(3482|3325|3321):.*WSClientWinCone_sample\.csproj')
)
1_BuildAll.ps1 にだけ渡す(2 と 3 は受け取らない)
- 既定で渡す。 通しで回す人がいちいち指定するものではない
- 明示的に
-IgnoreErrors @() を渡せば、除外なしにもできる
除外したものは 1_BuildAll.ps1 が別枠で件数と内容を出すので、
黙って消えるわけではない。
======== 既知として除外したエラー ========
除外条件 : error MSB(3482|3325|3321):.*WSClientWinCone_sample\.csproj
[WSClnt_sample (net48)] ... error MSB3482: ...
併せて直すもの
影響
- 利用者への影響: 無し(
root/programs の検証スクリプトのみ)
- net48 / net10.0: 両方(
1_BuildAll.ps1 の全体に効く)
- 既定の挙動は変わる。 これまで NG だったものが OK になる。
ただし除外した内容は表示され続けるので、見落としにはならない
- 検証:
.\0_RunAll.ps1 -Lang Both(終了コードがそのまま合否として読めること)
補足
既定で除外してよいのか、という点は一考した。
「環境に依存して必ず出るエラー」を既定で除外するのは、
本来直すべきものを隠すことにもなり得る。
ただし本件は csproj が証明書の拇印を直接持っている構造上の事情で、
証明書を配布しない限り、どの環境でも必ず失敗する。
BUILDING.md 4 節でも既知として扱っている。
「必ず失敗すると分かっているものを、毎回 NG として数える」方が実害が大きいと考える。
概要
0_RunAll.ps1の結果を、そのまま合否として読めない。1_BuildAll.ps1には-IgnoreErrorsがあり、既知のエラー(ClickOnce の署名)を合否判定から外せる。
0_RunAll.ps1にはそれを渡す口が無い。このため
0_RunAll.ps1を回すと、環境に由来する既知のエラーで必ず 1 本が NG になる。現状
.\0_RunAll.ps1 -Lang Bothエラーの中身はこれ 1 件だけである。
WSClientWinCone_sample.csprojは ClickOnce のマニフェスト署名が有効で、証明書の拇印を直接指定している。 その証明書が無い環境では必ず失敗する
(
BUILDING.md4 節に記載済み)。1_BuildAll.ps1を直接呼ぶ場合は、これを除外して回せる。0_RunAll.ps1にはこの口が無いため、同じことができない。何が困るか
結局ログを開いて中身を読むことになる
0_RunAll.ps1は、この状況をコメントで説明しているだけである説明で回避するのではなく、判定できるようにしたい。
対応
0_RunAll.ps1に-IgnoreErrorsを足し、既定でこの既知エラーを渡す。1_BuildAll.ps1にだけ渡す(2と3は受け取らない)-IgnoreErrors @()を渡せば、除外なしにもできる除外したものは
1_BuildAll.ps1が別枠で件数と内容を出すので、黙って消えるわけではない。
併せて直すもの
-IgnoreErrorsの説明をBUILDING.md/CHEATSHEET.mdの記述と食い違わないようにする影響
root/programsの検証スクリプトのみ)1_BuildAll.ps1の全体に効く)ただし除外した内容は表示され続けるので、見落としにはならない
.\0_RunAll.ps1 -Lang Both(終了コードがそのまま合否として読めること)補足
既定で除外してよいのか、という点は一考した。
「環境に依存して必ず出るエラー」を既定で除外するのは、
本来直すべきものを隠すことにもなり得る。
ただし本件は
csprojが証明書の拇印を直接持っている構造上の事情で、証明書を配布しない限り、どの環境でも必ず失敗する。
BUILDING.md4 節でも既知として扱っている。「必ず失敗すると分かっているものを、毎回 NG として数える」方が実害が大きいと考える。