「Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
部会開催メモ
詳細(2025年 †
4-6月 セルフ&オフライン部会(第42-44回) †
準備 †
Open棟梁をVS2022新環境でビルドして、移行・マイグレーションの評価を行い計画を策定
- 久々、ビルド・バッチを実行、インストールされない4.5を除き、ほぼビルドはできた。
- フォルダはrootじゃなくても良い。developブランチ → migrationブランチで作業
- 全ソリューションのビルドを確認後にポーティング作業を実施しつつ、必要に応じてOSSバージョンアップ移行を行う。
計画 †
- ターゲット・フレームワーク
.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) に新規対応。
- 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)
- 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バインディングのサポート
実施 †
- リマインド
- 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系のクロスコンパイルで発生)。
- .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を追加(復元)。
- 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?追加(初期状態ではなにも追加されていないので適宜、追加する)
- デザインが崩れている所を発見して修正を加えていく。
- その他
- Public名前空間:暗号化系も、なかなか厳しい状況(SYSLIB0045)。
- 全プロジェクト:System.Data.SqlClient? → Microsoft.Data.SqlClient?
結果 †
- .NET 8で、BinarySerialize?が完全廃止になった。
- 従って、.NET Coreの通信制御はインプロセスのみ。
- 関連して、幾つかのプロジェクトのドロップを行った。
- いくらか、.NET Fx側のサポート終了OSSが観測された。
- 細かい変更点
- サクラエディタのUTF-8グレップ:-GCODE=4を付与
- Security.Cryptography.EccKey? → Jose.keys.EccKey?(名前空間の変更)
- ビルドシステム・エンハンス(nuget.exe最新化、Tempファイル削除集約)
- その他、前バージョンのビルドシステムの潜在不良の様なモノへの対応
7-9月 セルフ&オフライン部会(第45-47回) †
.NET10マイグレ †
- SYSLIB 系の警告
.NET 6 以降で発生。
- SYSLIB0021: 'XXXCryptoServiceProvider?' や XXXManaged` は旧形式です
- SYSLIB0022: 'RijndaelManaged?' は旧形式です
- SYSLIB0023: 'RNGCryptoServiceProvider?' は旧形式です
- SYSLIB0027: 'PublicKey?.Key' は旧形式です
- SYSLIB0028: 'X509Certificate2.PrivateKey?' は旧形式です
- SYSLIB0041: 'Rfc2898DeriveBytes?(...)' は旧形式です
- WFOのエラー
.NET9以降の破壊的変更らしい。
- プロパティがバイナリ シリアル化される設計のセキュリティ上のリスクを警告
- プロパティがデザイナーによってシリアル化される場合は、次のいずれかの方法でシリアル化を構成します。
・プロパティに DefaultValueAttribute? を追加し、既定値を指定します。既定値以外の場合、プロパティはシリアル化される。
・プロパティに DesignerSerializationVisibilityAttribute? を追加し、可視性を Visible(値型)または Content(複合型)に設定。
- プロパティがデザイナーによってシリアル化される場合は、
・プロパティに DesignerSerializationVisibilityAttribute? を追加し、可視性を Hiddenに設定。
NuGet?最新化 †
- サポートされる *.pdb のフォーマットはportableに限定される模様。
- nuspecファイルは1つだけ作成すれな良くなった(*.nupkgファイルと *.snupkgファイルが生成される)。
- NuGet?サーバーでのサポートがなくなり、ソース・リンク(詳細不明)に置き換わっている模様。
- ちなみに、nuget packでのソース同梱もできなくなっている(contentsではjs/css的になってしまう)。
- シンボルサーバー含めた動作
- .NET Coreはローカル・ソース・ファイルを使用してステップ・インする(ソース・リンクが詳細不明)。
- .NET Frameworkは正しく *.pdb が取れているがステップ・インしない(別途ローカルで*.dll と *.pdbをベアにすれば動作する)。
VS2026 Insider †
- .NET10
- ビルドができることを確認
- WFO1000のコード修正の実施(Visible明示)
- 新規のワーニング確認(ライブラリ側):
- warning MSB3277: "Microsoft.Extensions.DependencyInjection?.Abstractions" の異なるバージョン間で、解決できない競合が見つかりました。
- warning SYSLIB0057: 'X509Certificate2.X509Certificate2(byte[])' は旧形式です
- warning SYSLIB0057: 'X509Certificate2.X509Certificate2(string)' は旧形式です
- warning SYSLIB0057: 'X509Certificate2.X509Certificate2(string, string?)' は旧形式です
- warning SYSLIB0057: 'X509Certificate2.X509Certificate2(string, string?, X509KeyStorageFlags?)' は旧形式です
- warning SYSLIB0060: 'Rfc2898DeriveBytes?.Rfc2898DeriveBytes?(string, byte[], int, HashAlgorithmName?)' は旧形式です
- warning NU1510: PackageReference? System.Net.Http は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? System.Reflection.Emit.ILGeneration は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? System.Reflection.Emit.Lightweight は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? System.Security.Cryptography.Xml は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? System.Security.Cryptography.Cng は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? System.Security.Cryptography.OpenSsl? は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? System.Security.Cryptography.X509Certificates は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1904: パッケージ 'System.Drawing.Common' 4.7.0 に既知の クリティカル 重大度の脆弱性があります、https://github.com/advisories/GHSA-rxg9-xrhp-64gj
- 新規のワーニング確認(UIサブシステム側):
- warning NU1510: PackageReference? Microsoft.Extensions.Configuration.Json は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? Microsoft.Extensions.Configuration.FileExtensions? は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? Microsoft.Extensions.Primitives は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? Microsoft.Extensions.Configuration は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? System.Security.Cryptography.Xml は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? Microsoft.Extensions.Configuration.Abstractions は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning NU1510: PackageReference? System.Formats.Asn1 は排除されません。このパッケージは不要である可能性があるため、依存関係から削除することを検討してください。
- warning ASPDEPR008: 'IWebHost?' は旧形式です ('IWebHost? is obsolete. Use IHost instead. For more information, visit https://aka.ms/aspnet/deprecate/008.')
- warning ASPDEPR008: 'WebHost?' は旧形式です ('WebHost? is obsolete. Use HostBuilder? or WebApplicationBuilder? instead. For more information, visit https://aka.ms/aspnet/deprecate/008.')
- warning ASPDEPR008: 'IWebHostBuilder?.Build()' は旧形式です ('IWebHost? is obsolete. Use IHost instead. For more information, visit https://aka.ms/aspnet/deprecate/008.')
- 既存ビルドの確認
- MSBuildで問題発生 → パス変更
- 新規のワーニング確認:既存は無し
実施結果 †
3Qには.NET01が正式リリースされる予定なのでUIサブシステム側のビルドを通す。
- 確認済みのワーニング落とし
- UIサブシステム側のビルド実行
- 新規のビルドエラー、ワーニング落とし
10-12月 セルフ&オフライン部会(第48-50回) †
.NET10マイグレ †
9月にはリリース候補版(RC)が公開、11月11日に正式リリース予定
- SYSLIB 系の警告
.NET 10 以降で発生。
- SYSLIB0057: 'X509Certificate2.X509Certificate2(XXXX)' は旧形式です
- (byte[])
// 非推奨・旧形式
return new X509Certificate2(
PrivacyEnhancedMail.GetBytesFromPemString(
pemString, PrivacyEnhancedMail.EnumToString(label)));
// 修正方法
return X509CertificateLoader.LoadCertificate(
PrivacyEnhancedMail.GetBytesFromPemString(
pemString, PrivacyEnhancedMail.EnumToString(label)));
- (string, string?, X509KeyStorageFlags?)
// 非推奨・旧形式
X509Certificate2 x509Key = new X509Certificate2(certificateFilePath, password, flag);
// 修正方法
X509Certificate2 x509Key = X509CertificateLoader.LoadPkcs12FromFile(certificateFilePath, password, flag);
- SYSLIB0060: 'Rfc2898DeriveBytes?.Rfc2898DeriveBytes?(string, byte[], int, HashAlgorithmName?)' は旧形式です
- NU1510:単純にNuGet?参照を削除(不要な場合と、BCLに追加された場合の両方のケースがあるもよう)
- Microsoft.Extensions.Configuration系は、コレまで消すと動かなくなっていたが消しても問題なくなった。
- System.Reflection.Emit系は、バイナリシリアライズのサポートが無くなったことで削除した。
- その他
- CA1416:必要に応じてプラットフォーム対応を実装
- 関数なら、[SupportedOSPlatform("windows")]、[SupportedOSPlatform("linux")]を付与。
- コードブロックの場合、
・if (os.Platform == PlatformID.Win32NT)、PlatformID.Unix)では、警告は消えなかった。
・if (OperatingSystem?.IsWindows?())などが使えるが、elseにNotImplementedException?などが必要になる。
・その他、何らかの条件分岐が、ある程度サポートPFを暗示していれば一先ずOKと言う話もある。
認証系マイグレ †
実施結果 †
参考 †