Repository navigation
OTR_ReleaseDetails03
nishi_74322014 edited this page Oct 28, 2026
·
1 revision
OpenTouryo リポジトリの Git のタグ間の差分を読んで作った、詳細なリリース情報(03 系と、未リリースの develop)。
利用者向けの要約は Open 棟梁のリリース情報 を参照。作り方は リリース・エンジニアリング を参照。
- 対象:
C:\OpenTouryoのクローン。未リリース区間はorigin/develop(最終コミット 2026-10-22、PR #635 のマージ)を基準にする。
developに未マージの作業中ブランチ(5th_agent、2026-10-28)は、別の節に分けて書く。 -
パスは
root/programs/からの相対で書く。Infra/はCS/Frameworks/Infrastructure/の略。 -
#番号は OpenTouryo リポジトリの Issue。内容は、差分とリポジトリ内の文書(
ANALYSIS.mdなど)から読んだものである。
| 区間 | 期間 | コミット(マージ除く) | 差分 |
|---|---|---|---|
| 02-70 → 03-00 | 2021-03-30 〜 2022-04-04 | 59 | 381 ファイル、+11,675 / −7,100 |
| 03-00 → 03-10 | 2022-04-04 〜 2025-07-01 | 34 | 1,327 ファイル、+346,469 / −196,363 |
| 03-10 → 03-20 | 2025-07-01 〜 2025-12-17 | 12 | 288 ファイル、+4,879 / −15,733 |
| 03-20 → develop | 2025-12-17 〜 2026-10-22 | 277(PR 40) | 1,204 ファイル、+98,474 / −10,484 |
| (参考)develop → 作業中ブランチ | 2026-10-22 〜 2026-10-28 | 3 | 23 ファイル、+999 / −346 |
Issue 単位の修正(#390〜#412)。差分の中心はサンプルとテンプレートで、フレームワーク本体の変更は通信制御に集中している。
| Issue | ファイル | 変更 |
|---|---|---|
| #393 | Infra/Framework/Transmission/CallController.cs |
SOAP・WebAPI の Cookie コンテナ対応。 Web 参照(Reference)を 1 つ持つ形から、プロパティ文字列ごとに保持する辞書(WEB_REF、syncObject で排他)に変更。CookieContainer を CallController のプロパティとして公開 |
| #395 |
CallController.cs、ServiceInterface/*/FxController.cs
|
ASP.NET WebAPI(JSON)の例外処理を修正。 サーバ側で業務例外を返す形を見直し、クライアント側の再スロー部分を整理 |
| #399 | CallController.cs |
HttpClient をサーバ側でも使えるようにした。 都度生成せず、サービス名ごとにプールする。代わりに「マルチスレッドのクライアントからは使えない(クリティカル・セクション内で使う)」制約が付いた |
| #400 | Infra/Business/Presentation/MyBase*Controller*.cs |
キャッシュ制御ヘッダの二重追加エラー。 AppendHeader をやめ、既存のヘッダを消してから設定する |
| #412 | Infra/Framework/ |
JwkSetStore のコンストラクタの TypeInitializationException
|
-
Tools/DistributeFile_Toolを追加(#408。テンプレートにはマージしない)。→ 03-10 で削除。 - CLI テンプレート(
Samples/CLI_sample、Samples4NetCore/Legacy/CLI_sample。#398、19 コミット)。 - 設定ファイル:
root/files/resource/Log/*Log*.xmlのインデントをスペースに、パス区切りを/に(#407)。接続文字列からsqlexpressを削除(#401・#403・#404)。 - ASP.NET Core MVC サンプル:
Startup.csの修正、Crud2Controllerの追加(#410・#411)。 - NuGet の登録バッチの修正(#394)。
-
CallControllerの Web 参照の持ち方が変わったが、公開メンバー(CookieContainer)は維持。 -
HttpClient利用時のスレッドの制約が増えた(#399)。
3 年の間隔があり、「migration branch」で 16 段に分けて移行した区間(2025-04〜06)。差分が大きいのは、旧ターゲットのプロジェクトと、同梱の JavaScript ライブラリの入れ替えによる。
| 03-00 | 03-10 | |
|---|---|---|
| フレームワーク本体のプロジェクト |
*_net45 / _net46 / _net47 / _net48 / _netstd20 / _netstd21
|
*_net48 / *_netcore80 |
| パッケージ参照 | packages.config |
PackageReference |
| ビルド・バッチ | net4x・netstd 系 |
2_Build_NuGet_net48.bat / 2_Build_NuGet_nettcore80.bat など |
- 条件付きコンパイルのシンボル(
NETSTDなど)は残し、NET45/NET46の分岐はこの時点では残った(03-20 で除去)。
| 区分 | 内容 |
|---|---|
| 追加 |
Infra/Public/Log/BaseLog.cs・Log_log4net.cs・Log_nlog.cs・LogManager_nlog.cs(NLog のサポート。log4net と同じ窓口 LogIF から使う) |
| 改名 |
Public/Log/LogManager.cs → LogManager_log4net.cs
|
| 削除 |
Public/Db/DamOraOdp.cs(旧 ODP.NET。DamManagedOdp へ) |
| 削除 |
ServiceInterface/ASPNETWebService の ServiceForFx.asmx.cs(ASMX)・WCFHTTPSvcForFx.svc.cs(WCF-HTTP)・IWCFHTTPSvcForFx.cs
|
| 削除 |
ServiceInterface/ASPNETWebServiceCore(.NET 側の通信制御のサービス。Samples4NetCore/Backend/ASPNETWebService に置き換え) |
| 再構成 |
ServiceInterface/ASPNETWebService を Global.asax + App_Start/*Config.cs の構成に作り直し |
| 削除 | Tools/DistributeFile_Tool |
-
DamSqlSvrの参照をSystem.Data.SqlClient→Microsoft.Data.SqlClientに変更。 -
DamPstGrS(Npgsql)は .NET 側のみに。
- テスト・プロジェクトを移行(
Frameworks/Tests)。root/files/resource/Sql/のテスト用 SQL を整理。
- 通信制御で ASMX・WCF-HTTP のプロトコルが使えなくなった。 WebAPI(JSON)か、WCF-TCP を使う。
DamOraOdpを使っていた場合はDamManagedOdpに置き換える。-
System.Data.SqlClientの型を直接扱っていた場合は、Microsoft.Data.SqlClientに置き換える。 - .NET Framework 4.5〜4.7・.NET Standard 向けのビルドは無くなった。
.NET 10 への移行(「dotnet10 branch」)と、NuGet パッケージ作成の整備(2025-07〜12)。
- プロジェクトを
*_netcore80→*_netcore100に。 -
NET45/NET46の条件付きコンパイルの分岐を除去。 例:CmnJwtTokenの Unix 時間、SAML2ClientのHashNameConst.SHA1/HashAlgorithmName.SHA1の分岐、FAPI2 のNotSupportedException。 -
.NET 10 で非推奨になった API の置き換え:
new X509Certificate2(path, pwd)→X509CertificateLoader.LoadPkcs12FromFile(NETSTD側のみ)、パスワードからの鍵の導出 など(Public/Security/のSymmetricCryptography・Pwd/GetPasswordHashV1/V2・HashAlgorithmCmnFunc・DigitalSignX509・DigitalSignECDsaCngほか)。 -
ASymmetricCryptographyの旧実装の一部を削除。 -
Public/Diagnostics/MyDebug.cs→Public/Security/MyDebug.cs(Security のプロジェクトへ移動)。
-
Tools/DeployZipPackWithHTTP(DotNetZip の廃止に伴う)。→ develop で復活(#528)。 - 非同期イベントのサンプル(
Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample。BinarySerializeに依存)。 -
Tests/ExecOnLinux。
-
CS/NuGet/を整理:テスト用のパッケージ(T_*.nuspec・T_NuGetPack.bat・_T_NuGetPush.bat。偽名Erutcurtsarfni.Oyruot.Publicのα版でシンボル・サーバーを確かめる)を追加。 -
このタグの時点の
*.nuspecは、版が3.0.0固定・依存のgroupがnet8.0のままだった。 → develop で$version$化・net10.0化(#531)。
- .NET 8 向けのビルドは無くなった(.NET 10 のみ)。
-
MyDebugの名前空間・アセンブリが変わった。
未リリース。 次版(03-30、OpenTouryoVersion は 3.3.0-alpha1)に入る予定の変更で、確定ではない。
コーディング・エージェントを使って進めた区間で、PR は「1st_agent」〜「4th_agent」の 4 段(2026-07〜10)。
コミットの約半分が、検証の機械化・文書・テストであり、フレームワーク本体の変更は 156 ファイル(+15,666 / −3,503)。
| 段 | 期間 | 主な Issue | 内容 |
|---|---|---|---|
| 1st_agent | 2026-07-31〜08-02 | #501・#508・#509・#512・#513・#515 |
AGENTS.md などの文書、ビルドの機械化(1_BuildAll.ps1 ほか)、D 層自動生成ツールの CUI 化 |
| 2nd_agent | 08-05〜08-08 | #517・#520・#522・#524・#528 | GitHub Actions の CI、単体テストの機械比較、ZIP 部品の作り直しと DeployZipPackWithHTTP の復活 |
| 3rd_agent | 08-09〜08-21 | #531〜#582 | リリース作業の整理(版の一括更新)、CodeQL 対応、構成の突き合わせ、Docker のサンプル、疎通確認(3_SmokeTest.ps1) |
| 4th_agent | 09-10〜10-22 | #584〜#634 | 認証・暗号の部品の修正、NUnit の単体テストとカバレッジ、Linux での単体テスト、汎用認証サイトからの部品の移設 |
| Issue | 変更 |
|---|---|
| #504 |
SAML2Client の要求の作成・応答の検証に hashAlgorithmName 引数を追加し、既定を SHA1 → SHA256 に変更
|
| #584 |
IdToken の hash クレーム(at_hash など)の計算で、ハッシュの左半分の切り出しを ShortenByteArray から CopyArray に置き換え |
| #586 |
AuthenticationHeader:スキームの後ろが空・Base64 でない場合に例外にせず、照合失敗として扱う |
| #587 |
OAuth2AndOIDCConst:active、RFC 6750 の invalid_token、OIDC Core の login_required / consent_required / interaction_required / account_selection_required、CIBA の unknown_user_id を追加 |
| #592 |
OAuth2AndOIDCClient:クライアント認証の方式を選べるようにした(client_secret_basic / _post / _jwt、private_key_jwt)。Basic の資格情報を URL エンコードしてから Base64 にする(RFC 6749 §2.3.1)。AuthenticationHeader.GetCredentials に、復号前後の両方を返す版を追加 |
| #598 |
SAML2Bindings の検証が、StatusCode を見ずに Assertion を必須にしており、Assertion を持たない正当なエラー応答を弾いていたのを修正。VerifyResponse の out statusCode を検証の前に設定 |
| #600・#606 |
SAML2Client:応答の検証に証明書のパスを渡すオーバーロード、要求の署名鍵を渡すオーバーロード(null・空は受けない) |
| #601 |
AccessToken / IdToken の検証に、jws・iss・aud を引数で受けるオーバーロードを追加(複数の認可サーバを相手にできる)。ResponseObject.Verify も同様 |
| #603 |
aud の照合を OAuth2AndOidcClientID / OAuth2AndOidcClientIDs のいずれかを含むか、に統一(配列の aud に対応) |
| #604 |
SAML2 の SigAlg を、実際の署名から決める(GetSigAlg。RSA の SHA1/256/384/512、DSA)。それまでは SHA256 で署名しても rsa-sha1 を名乗っていた。 VerifyRedirect が 2 つに(名乗りどおりに検証する版と、互換の版)。引数名 dsRSAwithSHA1 → ds
|
| #634 |
汎用認証サイトから部品を移設(すべて追加。既存のシグネチャは変えていない):DPoPProof、OAuth2AndOIDCClient の DPoP・DCR、RemoteJwkSetStore、SAML2Metadata、SAML2Attributes、SAML2Client.VerifyResponseWithReason・VerifyRequest・CreateRedirectResponse / CreatePostResponse、OAuth2AndOIDCSpec、JwkSetDocument、CmnServerParams。SAML2Client などを partial class に分割 |
| — |
Public/Security/Xml/SignedXml2.Verify が署名の数学的な正しさだけを見ていたのを修正。参照(Reference)が 1 つで、その URI が検証対象の要素の ID と一致し、同じ ID の要素が 1 つだけであることを確かめる(署名ラッピング攻撃への対策) |
| Issue | 変更 |
|---|---|
| #374 |
EccPublicKeyConverter:jose-jwt の EccKey をやめ、ECParameters から ECDsaCng を作る(依存の削減) |
| #595・#596 |
DigitalSignECDsaCng にハッシュ・アルゴリズムを受けるコンストラクタを追加(既定は従来どおり SHA-256)。ES384 / ES512 の検証が Windows と Linux で食い違っていた問題。PS256 / PS384 / PS512(JWS_PS*・_Param・_X509)を追加 |
| #608 |
共通鍵暗号のパスワードからの鍵の導出:net48 で StackOverflowException(catch できない)でプロセスが落ちていた。net10.0 では鍵と IV を 2 回に分けて導出しており、IV が鍵の先頭と同じになっていた(net48 とも暗号文が食い違う)。1 回で鍵+IV の長さを導出し、切り分ける形に統一 |
| #611 |
JWS.Verify(jwt, typ) を追加(typ を照合する版。Verify(jwt) は照合しない) |
| #615 |
JWS / JWE のヘッダを基底が持つ形に整理。JWEHeader を public get / protected set のプロパティに。JWE.Decrypt が typ を照合しなくなった(照合するなら Decrypt(jwt, typ, out ...)) |
| #626 |
DigitalSignX509:.NET 側で DSA の公開鍵を GetDSAPublicKey で取る。net48 の DSACng の秘密鍵が平文でエクスポートできない場合は、写し直さずにそのまま使う |
| #627 |
AsymmetricAlgorithmCmnFunc:生成する ECDSA(CNG)の鍵を、平文でエクスポートできる鍵にした(JWS_ES*_Param の秘密鍵の取り出しが例外になっていた) |
| #628 |
AsymmetricAlgorithmCmnFunc.CreateCryptographySP:RsaCng の指定が効いていなかったのを修正(new RSACng() で作る)。RsaCsp は RSA.Create() のまま(net48 では RSACryptoServiceProvider、.NET では環境の既定の実装。.NET の RSACryptoServiceProvider は OAEP-SHA256 などを持たないため) |
| #629 | 鍵交換(BaseKeyExchange):暗号文の文字列化を UTF-8 から Base64 に(バイナリを UTF-8 で文字列にすると壊れる) |
| #630 |
RsaBob:証明書の読み込みに X509KeyStorageFlags.Exportable を付ける |
| #631 |
DSA の署名:DsaOpenSsl_SHA256 を指定しても SHA1 で署名していたのを修正 |
| #634 |
JwsFactory(alg から署名器を作る)、JwtReader(検証せずに読む)、JwkOperator(RFC 7638 の指紋、公開鍵だけか、秘密鍵の項目を落とす)、RsaKeyConverter
|
| #536 |
EnumSymmetricAlgorithm.CipherMode_ECB に [Obsolete](CodeQL。既定ではなく、削除は互換を壊すため非推奨化に留めた) |
| Issue | ファイル | 変更 |
|---|---|---|
| #405 |
IO/ResourceLoader、Util/GetConfigParameter、Framework/Util/GetMessage・GetSharedProperty、Log/LogManager_*
|
存在確認と読み込みを別々に行っていたのを、ResourceLoader.ResolveFilePath で解決したパスを使う形に統一 |
| #515 | Db/SQLUtility |
バッチ更新の SQL 生成:SET・WHERE の列が空なら何もしないガード、列名の括弧付け、複合主キーの条件(GetPrimaryKeyCondition) |
| #522 | Util/ArrayOperator |
GetLongFromByte の桁の重みの修正(結果ファイルの比較で、不具合が「正」として固定されていた) |
| #524 |
IO/ZipperV2・UnZipperV2・ZipBaseV2・ZipEnumV2
|
DotNetZip を使わない ZIP 部品(System.IO.Compression)を追加 |
| #544 |
Dto/DTTables・DTTable ほか、Util/CustomMarshaler
|
DataSet との相互変換(FromDataSet / ToDataSet)。null を DBNull.Value に |
| #563 | Xml/XmlLib |
GetAttributeFromXPath の index が効いていなかった。GetAttributeFromXmlNode(XmlNode, string, int) を [Obsolete]
|
| #567 |
Dto/DTRow・DTRowVersion・DTTableStatus ほか |
変更前の値(Original)を保持(row[colName, DTRowVersion.Original])。WebAPI 越しに楽観排他ができる |
| #612 |
Db/SQLUtility、Str/FormatConverter、Util/PubCmnFunction
|
null を NULL(PostgreSQL は DEFAULT)に変換、文字列リテラルの ' のエスケープ
|
| #616 | Diagnostics/StackFrameOperator |
JIT のインライン展開でフレームがずれないよう NoInlining
|
| #618〜#621 |
Dto/DataToPoco・PocoToPoco、FastReflection/CompiledExpressionCreater
|
書き込めない・読めない項目を飛ばす(以前は NullReferenceException)、同名で型が違う項目を Convert.ChangeType で移す(以前は InvalidCastException)、移送先に構造体を許す(以前は値が入らなかった) |
| #622 | Dto/DataToDictionary |
重複キーで、専用のメッセージ(DUPLICATE_DICTIONARY_KEY)の例外 |
| #632 | IO/DeflateCompression |
出力パスを Path.Combine で作る(Linux 対応) |
| #634 |
Log/LogSanitizer、Str/UriOperator
|
ログに出す値の改行を落とす。URI の小物 |
| Issue | 変更 |
|---|---|
| #536・#549 |
FxCmnFunction:Cookie に Secure 属性(HTTPS のときのみ)。リバース プロキシで TLS を終端する場合は UseForwardedHeaders が要る旨をコメントと文書に記載 |
| #594 |
FxCookieNamePrefix で Cookie 名に接頭辞(FxCmnFunction.GetCookieName。書く側と読む側の両方で通す)。BaseController・BaseMVController・BaseMVControllerCore
|
| #543 |
CallController:未定義のプロトコルで null ではなく FrameworkException(PRT_NAMESERVICE_XML_FORMAT_ERROR)。サンプルの TMProtocolDefinition.xml から ASMX・WCF-HTTP を外した |
| #546・#561 |
CallController:WCF-TCP の呼び出しをメソッドに切り出した際の欠落と、その修正 |
| #575 |
MyMVCCoreFilterAttribute:HttpWebRequest → HttpClient
|
-
D 層自動生成ツール(
DaoGen_Tool)の CUI モード(/CUI /MODE ...。#508)。 -
DeployZipPackWithHTTPの復活(#528。ZipperV2/UnZipperV2を使う。設定と履歴は JSON)。
- 3 本のスクリプト:
1_BuildAll.ps1(#513)・2_RunAllTests.ps1(#520 ほか)・3_SmokeTest.ps1(#546・#571 ほか)、0_RunAll.ps1、0_SetVersion.ps1(#531)。 - 単体テスト:NUnit のテスト・プロジェクト(
Tests/NUnit/TestPublic・TestFramework)とカバレッジの自動集計(Tests/COVERAGE.md)。結果ファイルによる比較(Tests/Golden/)。 - Linux での単体テスト(docker。#632)、クロス DB(#623)。
- GitHub Actions:
build-windows.yml・build-windows-vb.yml、Dependabot、CodeQL、Secret scanning、ブランチ保護(#517・#536・#542・#588・#610)。 - 構成の突き合わせ:
CompareConfig.ps1・CompareRedirect.ps1・ComparePackage.ps1(CS 版と VB 版、bindingRedirect、パッケージの版。#553・#556・#557・#569)。 - 脆弱性の確認:
CheckVulnerability.ps1、SelectTargets.ps1(変更から回す範囲を決める。#610)。 - NuGet:
*.nuspecの版を$version$に、依存をnet10.0に、パッケージ化の時に net48 と net10.0 のアセンブリの版の一致を検査(#531)。
-
Docker:
Samples4NetCore/Docker/MVC_Sample(#548)・Docker/ASPNETWebService(#582)。環境で切り替える設定(appsettings.Container.json、UseForwardedHeaders。#541・#549)。 - ASP.NET Core WebAPI のサンプルで OpenAPI を標準機能で出す(
/openapi/v1.json。#580)。 -
Samples/WS_sample/ASPNETWebServiceの引き戻し(#566)。
-
AGENTS.md・CODING.md・CONFIGURATION.md・CHEATSHEET.md・BUILDING.md・TESTING.md・SMOKETEST.md・RELEASE.md・GitHubUsage.md、各領域のANALYSIS.md(#613 で区画ごとに再編)。 - エージェント用スキルの取得(
GetAgentSkills.ps1。#577)。
- log4net 3.3.0、System.Security.Cryptography.Xml 9.0.18、System.Security.Cryptography.Pkcs(#617 で版を揃えた)など。
| 変更 | 影響 | 対処 |
|---|---|---|
| SAML2 の署名の既定 SHA1 → SHA256(#504) | 既定のまま相手と通信している場合、相手が SHA1 を前提にしていると失敗 | 引数 hashAlgorithmName で SHA1 を指定する |
SAML2 の SigAlg を実際の署名から決める(#604) |
#604 より前の Open 棟梁が送った要求・応答(rsa-sha1 と名乗る SHA256 の署名)は検証に失敗する |
送り手・受け手を揃えて上げる |
EncodeAndSignRedirect / VerifyRedirect の引数名 dsRSAwithSHA1 → ds(#604) |
名前付き引数で呼んでいる場合にコンパイル・エラー | 引数名を直す |
| パスワードからの鍵の導出(#608) | net10.0 で暗号化したデータが、新版では復号できない(IV が変わる) | 旧データは旧版で復号して再暗号化する |
JWE.Decrypt が typ を照合しない(#615) |
typ の照合に頼っていた場合、照合されなくなる |
Decrypt(jwt, typ, out ...) を使う |
XmlLib.GetAttributeFromXmlNode(..., int) の非推奨(#563) |
警告 | 2 引数の版を使う |
CipherMode_ECB の非推奨(#536) |
警告 | CBC などを使う |
未定義のプロトコルで FrameworkException(#543) |
以前は null が返っていた |
設定(TMProtocolDefinition.xml)を直す |
DataToPoco / PocoToPoco の振る舞い(#618〜#620) |
例外になっていた入力が、通るようになった | 例外を前提にした処理があれば見直す |
develop にもまだ入っていない。 5th_agent ブランチ(2026-10-28、3 コミット)の内容で、
レビュー・マージの前なので、変わりうる。
| Issue | 対象 | 内容 |
|---|---|---|
| — | Public/Db/SQLUtility |
リテラル・識別子の生成を SQLSanitizer に寄せた(QuoteIdentifier・ToStringLiteral)。MySQL で \ を含む値のリテラルが正しく閉じない問題を修正。PostgreSQL は E'~'、MySQL は 16 進リテラルになる |
| #636 | Public/Db/SQLSanitizer |
SQL Server の文字列リテラルを N'~' にした。N が無いと照合順序のコード・ページで解釈され、そこに無い文字(絵文字・ハングルなど)が ? などに化けていた |
| — | テスト |
SQLSanitizer・SQLUtility・DamTests などのテストの拡充、ゴールデン・ファイルの更新 |
- 後方互換性(マージされた場合):
SQLUtilityが生成する SQL の文字列が変わる(SQL Server のN'~'、MySQL の 16 進リテラルなど)。
生成された SQL の文字列を比較・保存している場合は、見直しが要る。
- Open 棟梁のリリース情報
- リリース・エンジニアリング
- OpenTouryo リポジトリ:
root/programs/CS/Frameworks/ANALYSIS.md、Infra/Framework/ANALYSIS.md、Infra/Public/ANALYSIS.md、Infra/Public/Security/ANALYSIS.md、GitHubUsage.md - Compare 03-20...develop · OpenTouryoProject/OpenTouryo
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。