「[[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] ***.NET10マイグレ [#b7cbce86] -SYSLIB 系の警告~ .NET 6 以降で発生。 --SYSLIB0021: 'XXXCryptoServiceProvider' や XXXManaged` は旧形式です ---https://learn.microsoft.com/ja-jp/dotnet/fundamentals/syslib-diagnostics/syslib0021 ---.Create() ファクトリメソッドを使って対称・非対称アルゴリズムをインスタンス化(対称・非対称はRSA系のみ) // 非推奨・旧形式 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 を使う(.NET Core系のみ)。 // 非推奨・旧形式 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() や GetECDsaPublicKey() などを使って公開鍵を取得。 ---でチェックしてAPIを使い分ける。 // 非推奨・旧形式 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() などを使って秘密鍵を取得。 ---でチェックしてAPIを使い分ける。 // 非推奨・旧形式 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 ---ハッシュ アルゴリズム名 (既定値は HashAlgorithmName.SHA1) を明示的に指定できるオーバーロードを使用。 // 非推奨・旧形式 var pdb = new Rfc2898DeriveBytes("password", salt); // 修正方法 var pdb = new Rfc2898DeriveBytes( System.Text.Encoding.UTF8.GetBytes("password"), salt, 10000, HashAlgorithmName.SHA256); --ログ:https://github.com/OpenTouryoProject/OpenTouryo/commit/47f3f56f7f8fa0f6c2f5da533e2cb70788477296 -WFOのエラー~ .NET9以降の破壊的変更らしい。 --WFO1000: プロパティ "property" は、プロパティ コンテンツのコード シリアル化を構成しません。~ https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/compiler-messages/wfo1000 ---プロパティがバイナリ シリアル化される設計のセキュリティ上のリスクを警告 ---修正方法1:見せない:[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] ---修正方法2:初歩的コンバーター:[TypeConverter(typeof(MyCustomTypeConverter))] → [TypeConverter(typeof(System.Drawing.PointConverter))] ---修正方法3:高度なシリアライザ:[DesignerSerializer(typeof(MyCustomSerializer), typeof(CodeDomSerializer))] ***NuGet最新化 [#u982818c] -変更点: --サポートされる *.pdb のフォーマットはportableに限定される模様。 --nuspecファイルは1つだけ作成すれな良くなった(*.nupkgファイルと *.snupkgファイルが生成される)。 --NuGetサーバーでのサポートがなくなり、ソース・リンク(詳細不明)に置き換わっている模様。 --ちなみに、nuget packでのソース同梱もできなくなっている(contentsではjs/css的になってしまう)。 --シンボルサーバー含めた動作 ---.NET Coreはローカル・ソース・ファイルを使用してステップ・インする(ソース・リンクが詳細不明)。 ---.NET Frameworkは正しく *.pdb が取れているがステップ・インしない(別途ローカルで*.dll と *.pdbをベアにすれば動作する)。 -参考:[[NuGet導入、NuGet登録]] -[[NuGetパッケージの作成手順]] -[[NuGet導入後のデバッグ方法]] --[[NuGetパッケージの作成手順]] --[[NuGet導入後のデバッグ方法]] ***実施結果 [#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-09-03 (水) 13:52:37" 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/139.0.0.0 Safari/537.36"