「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>部会メモ]]
--[[部会メモ(2020年)>部会メモ#qba10194]]
--[[部会メモ(2021年)]]
--[[部会メモ(2022年)]]
--[[部会メモ(2023年)]]
--%%部会メモ(2024年)%%
--部会メモ(2025年)
*目次 [#x5557abd]
#contents
*概要 [#o4bb864a]
部会開催メモ
*詳細(2025年 [#i68b7d81]
**4-6月 セルフ&オフライン部会(第42-44回) [#e314d3d1]
***準備 [#s8852472]
Open棟梁をVS2022新環境でビルドして、移行・マイグレーションの評価を行い計画を策定
-久々、ビルド・バッチを実行、インストールされない4.5を除き、ほぼビルドはできた。
-フォルダはrootじゃなくても良い。developブランチ → migrationブランチで作業
-全ソリューションのビルドを確認後にポーティング作業を実施しつつ、必要に応じてOSSバージョンアップ移行を行う。
***計画 [#da07c38d]
-ターゲット・フレームワーク~
.NET Fx 4.5 - 4.7系、.NET Core 2 - 6系をドロップし、.NET 8に新規対応させる。
--.NET Fx 4.5はサポート終了済み、4.6は、2027/1/12まで。4.7は作業工数的な意味で。
--.NET Core 2 - 6は、サポート終了済み、.NET 8 は、2026/11/10まで。.NET 10は、2025/11頃にリリース予定。
--.NET Standard2.1は、.NET Core 3.0 以降が対象で非推奨の流れなので.NET Core(.NET 8)に移行。
--.NET Standard2.0は、残しておく意味が希薄になったのでドロップ(XPFがあれば別だが)。
--プリプロセッサ ディレクティブの変更("NETSTD" → "(NETSTD || NETCOREAPP)")
--.NET 6(LTS)は対応済み、.NET 7、9はSTSなので.NET 8(LTS) に新規対応。
-OSSバージョンアップ
--NuGet
---旧devenvのドロップにより packages.config を廃止し PackageReference に移行。
---NuGetパッケージを新パッケージに更新、ターゲットフレームワーク毎にサポート状況が異なる。
--データプロバイダ~
サポート状況がまちまちなので最新化(.NET Fx 4.8、.NET 8)せざるを得ない。
---SqlClientは、System.Data.SqlClient → Microsoft.Data.SqlClient(足切り早い)
---DamManagedOdp に完全移行(.NET Standardをドロップし.NET 8へ)するので DamOraOdp を完全削除
---Npgsqlはver9以降、.NET 6 以上のサポートに変更(Standard2.0 & 2.1での対応不可)。
--その他
---Sharpromptが.NET Fxのサポート終了、Simple_CLIをドロップ
---序にOSS系の更新(jQuery、Bootstrap、log4net → [[NLog>ログ出力方式 (NLog)]])
-Web系対応~
下記のために新規作成Webサイトのテンプレを使って再構築を予定
--.NET Fxの系は、PackageReferenceに対応しておらず、NuGet更新の難易度が高い。
--.NET Core系は、Gruntなどのタスクランナーが下火になってテンプレから除外。
--jQuery、Bootstrapのベターユースがよく解らないのでテンプレ準拠にする。
-Core系のBinarySerializeの完全廃止対応
--Core系の通信制御機能の全ドロップ(インプロセス呼び出しを除く)
--DeployZipPackWithHTTPCore(設定のセーブ/ロードのみだが工数マターでのドロップ)
-工数マターでのドロップ
--NuGet、テンプレート・リポジトリ~
.NET、VSバージョン数が減り、NuGetのデメリット顕在化で必要性が薄れたため。
--通信制御のHTTPサポート~
WebAPI一択に(TCPサポートのWCFは残す)
---ASP.NET Webサービスのサポート
---通信制御のWCFのHTTPバインディングのサポート
--利用頻度の低いツール
---DistributeFile_Tool
***実施 [#vb3e0bef]
-作業中の色々メモ
--リマインド
---Business以下は一度NuGet解除して、リリース前に再NuGet化する。
---セッション状態サーバー起動は以前のバージョンからbatを取り出すと良い。
--Core系RichClientのTarget:netx.x-windowsx.x(8.0, 7.0)
---TargetFramework
---Project出力(HintPath, DocumentationFile)
--Err.MSG:Add a reference to ".NETFramework,Version=v4.8" in the "TargetFrameworks" property of your project file and then re-run NuGet restore.
---メッセージ準拠のNuGetリストアでは、ソリューションのNuGetパッケージの復元から行うが、解決しない事がある。
---その場合は、packages / obj / binフォルダを削除する(Fx系とCore系のクロスコンパイルで発生)。
-非Web系
--.NET Fx
---(アレば)NuGet更新
---競合発生時はAssemblyBindingRedirectを設定
--.NET Core
---TargetFramework変更、参照設定の変更、NuGet更新
---競合発生時はAssemblyBindingRedirectではなくNuGetで上書き
---WindowsBase競合は、UseWindowsForms、UseWPFの両方をチェック~
(ライブラリが両方参照しているので、片方だけだと警告が出てしまう)
-Web系(.NET Fx)~
非Web系(.NET Fx)と重複した分を除く
--テンプレート差し替え~
.NET Fx 4.8のWebアプリケーションが、NuGet更新だけでは対応できなくなってきているのでのテンプレートを差し替え
---.NET Fx 4.8のWebアプリケーションを新規作成、WebFormsやMVCを構成する。
---載せ替えを、デバック実行を行いながら行って全体をマイグレーションして行く。
---Global.asax、BundleConfig.csに変更点が(相対的に)多い(と言えば多い)。
---最後に足りない参照設定(DLL、NuGet)を足していく。
--NuGet更新
---bootstrap:5.2.3 → 5.3.6
---DotNetCompilerPlatform:2.0.1 → 4.1.0
--Microsoft.CodeDom.Providers.DotNetCompilerPlatformを削除
---NuGet更新前に「bin\roslyn\csc.exe が見つかりませんでした」が発生。
---NuGet更新後に「認識されない要素 'system.codedom' です。」が発生。
---DotNetCompilerPlatformを削除することでエラー発生しなくなった。
---(昔の環境を取り置く場合以外、不要である場合がほとんどらしい)
--Err.MSG:'jquery' は無効なスクリプト名です。名前は '.js' で終わる必要があります。
---NuGetで「AspNet.ScriptManager.jQuery」をインストールする必要がある(新規作成のテンプレートでも必要)。
---'jquery' → 'bootstrap'、'respond'については、<asp:ScriptReference Name="bootstrap" />、<asp:ScriptReference Name="respond" />を削除する。
--デザインが崩れている所を発見して修正を加えていく。
---menu-contentn の classを削除
---.nav-side-menu を position: relative; にしないと、位置移動しない。
---body, html, .menu-list を height: 100%; にしないと縮んで表示される。
--MVCのAjax.BeginFormが適切に動作しない件
---Microsoft.jQuery.Unobtrusive.Ajaxのインストールが必要。
---MVCのBundleConfig.csで、jquery.unobtrusive-ajaxを追加(復元)。
--ログ(ポイント抜粋)
---WebForms_Sample~
C#版:https://github.com/OpenTouryoProject/OpenTouryo/commit/b8942bb8bfb3ca41d76829ef6c5175b01f465b81~
VB版:https://github.com/OpenTouryoProject/OpenTouryo/commit/a50542dd8f4bab9086a5a945d7df83901be05a3d
---MVC_Sample~
C#版:https://github.com/OpenTouryoProject/OpenTouryo/commit/0d48f82484361c7faa9ebce21332bce0163d9dab~
VB版:https://github.com/OpenTouryoProject/OpenTouryo/commit/4d1f2994abab440829041575ff3ad2cd5d77349d
-Web系(.NET Core)~
非Web系(.NET Core)と重複した分を除く
--テンプレート差し替え~
Gruntは引き続き利用可能そうだが、TaskRunnerExplorerがdisconになっている等、NuGetが楽そうなので、~
最新動向を取り込む意味でも新規作成したテンプレートに載せ替えた方が良さそうだと判断した結果。
---Program.Main スタイル プログラムに変換
---AddNewtonsoftJsonをひとまずコメントアウト。
---null 許容注釈コンテキスト(Nullable)を無効(disable)に設定
---本丸は、_Layout.cshtml(gruntfile.jsのbundle、uglifyの削除に対応)
---<environment include/exclude="Development">を削除(標準で入ってない)
--NuGet追加(初期状態ではなにも追加されていないので適宜、追加する)
--デザインが崩れている所を発見して修正を加えていく。
--ログ(ポイント抜粋)~
https://github.com/OpenTouryoProject/OpenTouryo/commit/2a08482f4c48398e7150fa859bb38a430d0a192e
-その他
--Public名前空間:暗号化系も、なかなか厳しい状況(SYSLIB0045)。
--全プロジェクト:System.Data.SqlClient → Microsoft.Data.SqlClient
***結果 [#h93626fa]
-大きな変更点
--.NET 8で、BinarySerializeが完全廃止になった。
---従って、.NET Coreの通信制御はインプロセスのみ。
---関連して、幾つかのプロジェクトのドロップを行った。
--いくらか、.NET Fx側のサポート終了OSSが観測された。
---Npgsql
---Sharprompt
-細かい変更点
--サクラエディタのUTF-8グレップ:-GCODE=4を付与
--Security.Cryptography.EccKey → Jose.keys.EccKey(名前空間の変更)
--ビルドシステム・エンハンス(nuget.exe最新化、Tempファイル削除集約)
--その他、前バージョンのビルドシステムの潜在不良の様なモノへの対応
**7-9月 セルフ&オフライン部会(第45-47回) [#sadb62cc]
***準備 [#b7cbce86]
-SYSLIB 系の警告~
.NET Core / .NET 5+系で、ほぼ必須。.NET Framework 4.x系では任意
--SYSLIB0021: 'XXXCryptoServiceProvider' や XXXManaged` は旧形式です
---https://learn.microsoft.com/ja-jp/dotnet/fundamentals/syslib-diagnostics/syslib0021
---.Create() ファクトリメソッドを使ってアルゴリズムをインスタンス化
// 非推奨・旧形式
var aes = new AesManaged();
var rsa = new RSACryptoServiceProvider();
// 修正方法
var aes = Aes.Create();
var rsa = RSA.Create();
--SYSLIB0022: 'RijndaelManaged' は旧形式です
---https://learn.microsoft.com/ja-jp/dotnet/fundamentals/syslib-diagnostics/syslib0022
---Rijndael は AES の元となるアルゴリズムですが、現在は AES のみが推奨
// 非推奨・旧形式
var rijndael = new RijndaelManaged();
// 修正方法
var aes = Aes.Create(); // Rijndael の代替
--SYSLIB0023: 'RNGCryptoServiceProvider' は旧形式です
---https://learn.microsoft.com/ja-jp/dotnet/fundamentals/syslib-diagnostics/syslib0023
---RNGCryptoServiceProvider の代わりに RandomNumberGenerator.Fill を使う。
// 非推奨・旧形式
var rng = new RNGCryptoServiceProvider();
rng.GetBytes(data);
// 修正方法
RandomNumberGenerator.Fill(data); // static method
--SYSLIB0027: 'PublicKey.Key' は旧形式です
---https://learn.microsoft.com/ja-jp/dotnet/fundamentals/syslib-diagnostics/syslib0027
---PublicKey.Key の代わりに、GetRSAPublicKey() などを使って公開鍵を取得。
// 非推奨・旧形式
var key = certificate.PublicKey.Key;
// 修正方法
var rsaPublicKey = certificate.GetRSAPublicKey(); // RSA の場合
var ecdsaPublicKey = certificate.GetECDsaPublicKey(); // ECDSA の場合
--SYSLIB0028: 'X509Certificate2.PrivateKey' は旧形式です
---https://learn.microsoft.com/ja-jp/dotnet/fundamentals/syslib-diagnostics/syslib0028
---PrivateKeyの代わりに、適切な GetRSAPrivateKey() や GetECDsaPrivateKey() などを使って秘密鍵を取得。
// 非推奨・旧形式
var privateKey = certificate.PrivateKey;
// 修正方法
var rsaPrivateKey = certificate.GetRSAPrivateKey(); // RSA の場合
var ecdsaPrivateKey = certificate.GetECDsaPrivateKey(); // ECDSA の場合
--SYSLIB0041: 'Rfc2898DeriveBytes(...)' は旧形式です
---https://learn.microsoft.com/ja-jp/dotnet/fundamentals/syslib-diagnostics/syslib0041
---パスワードを文字列で渡すオーバーロードは非推奨。バイト列とハッシュアルゴリズムの指定が必要。
// 非推奨・旧形式
var pdb = new Rfc2898DeriveBytes("password", salt);
// 修正方法
var pdb = new Rfc2898DeriveBytes(
System.Text.Encoding.UTF8.GetBytes("password"),
salt,
10000,
HashAlgorithmName.SHA256);
-.NET10移行
--現時点では、まだ、VS2022でのビルドをサポートしていない。
-- WFO1000:https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/compiler-messages/wfo1000
***計画 [#u982818c]
***実施 [#q344b58f]
***結果 [#j9074396]
*参考 [#ybd24dca]
**[[部会メモ(開発基盤部会)>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?%E9%83%A8%E4%BC%9A%E3%83%A1%E3%83%A2]] [#c696aeac]
IP:153.226.194.194 TIME:"2025-07-15 (火) 12:52:39" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&page=%E9%83%A8%E4%BC%9A%E3%83%A1%E3%83%A2%EF%BC%882025%E5%B9%B4%EF%BC%89" USER_AGENT:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"