2022-09-26: .NET 7 Release Candidate 1, Visual Studio 2022 17.4 Preview 2, Uno Platform 4.5

Published on Monday, 26 September 2022

トピックス

Announcing .NET 7 Release Candidate 1 - .NET Blog

https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-rc-1/

.NET 7 RC 1 がリリースされた。

.NET 7 の運用環境での利用がサポートされた初めてのリリース候補となっている(10月に RC 2 がリリース予定)。Preview からの変更点は不具合や継続的な改善が主となる。Visual Studio を使用する場合には Preview Channel での利用が推奨される。

記事では今までの Preview での改善などについての記事へのリンクやコントリビューターにスポットライトを当てて紹介している。

Announcing Entity Framework 7 Release Candidate 1 - .NET Blog

https://devblogs.microsoft.com/dotnet/announcing-ef7-rc1/

Entity Framework 7 RC 1 がリリースされた。

各種修正や改善、API の変更 (Trigger の API の移動や Raw SQL の FormattableString の受け取りなど)の確定といったものが含まれている。

ASP.NET Core updates in .NET 7 Release Candidate 1 - .NET Blog

https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-rc-1/

.NET 7 RC 1 での ASP.NET Core のアップデートについての記事。

RC 1 では次の新機能や改善が含まれていることを紹介している。

  • Blazor WebAssembly でのダイナミックな認証リクエスト
  • location の変更イベントのハンドリング
  • Blazor WebAssembly のデバッグ改善
  • .NET 6 プロジェクトのための .NET WebAssembly ビルドツール
  • WebAssembly 上の .NET JavaScript 相互運用
  • Kestrel のフル証明書チェインの改善
  • HTTP/2 アップロードの高速化
  • HTTP/3 の改善
  • Kestrel での WebTransport over HTTP/3 の実験的サポート
  • gRPC JSON トランスコーディングの OpenAPI 実験的サポート
  • レートリミットミドルウェアの改善
  • macOS の開発証明書の改善

Visual Studio 2022 17.4 Preview 2 - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-4-preview-2/

Visual Studio 2022 17.4 Preview 2 がリリースされた。

このリリースではエンタープライズ向けのサポートとして Windows Update for Business を使用した AAD 参加型デバイスでのセキュリティー更新の受け取り、ARM64 開発での Visual Studio 拡張機能開発と C++ ゲーム開発、JavaScript 開発のサポートの追加、マルチリポジトリーの操作の改善、ブランチ切り替えパフォーマンスの向上、Microsoft Teams ツールキットの追加、Markdown 編集サポートの追加など。

.NET 開発では .NET 7 RC 1 と MAUI のサポート、インラインリネーム機能の追加などが行われている。

.NET MAUI in .NET 7 Release Candidate 1 - .NET Blog

https://devblogs.microsoft.com/dotnet/dotnet-maui-in-dotnet-7-rc1/

.NET 7 RC 1 での .NET MAUI のアップデートについての記事。

このリリースでは Map コントロールの追加 (Windows は WinUI 3 が Map を持たないため未サポート)、コンテキストメニューやツールチップ、ジェスチャー、ウィンドウサイズと位置といったデスクトップ向けの改善が含まれている。

Rider 2022.3 Roadmap | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/09/15/rider-2022-3-roadmap/

Rider 2022.3 のロードマップについての記事。

C# 11 のサポートや起動パフォーマンスの向上、日本語を含むローカライズ、各種 UI の改善、WSL サポートや Linux の ARM64 サポート、Unity の Input System 対応、Blazor と Razor のホットリロードやフォーマッターの再実装など。

ReSharper 2022.3 Roadmap | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/09/15/resharper-2022-3-roadmap/

ReSharper 2022.3 のロードマップについての記事。

C# 11 のサポートや Razor のフォーマッターの再実装、コードのハイライトのオーバーホール、Out-of-Process 移行など。

Uno Platform 4.5: Uno Islands, 4 New Controls, Linux Framebuffer and MUCH more

https://platform.uno/blog/uno-platform-4-5-uno-islands-4-new-controls-linux-framebuffer-and-much-more/

Uno Platform 4.5 がリリースされた。

このリリースでは WPF 上に Uno (WinUI) をホストする Uno Island が導入され、Breadcrumb や PipsPager、Pull to Refresh といった新しいコントロールの追加、Linux のフレームバッファー DPI とスケーリング、16-bit モードのサポートが追加されている。Uno Toolkit にはセーフエリアやステータスバー、入力を扱う機能が追加された。

その他 Uno.Extensions の機能追加や iOS 16 の対応、Android でのパフォーマンスの向上などの対応も行われている。

Build skills that open doors—with Microsoft Learn

https://techcommunity.microsoft.com/t5/microsoft-learn-blog/build-skills-that-open-doors-with-microsoft-learn/ba-p/3614011

Microsoft の技術系のリソースが Microsoft Learn ファミリーに統合されるというアナウンス。

これに伴いドキュメンテーションである docs.microsoft.com も learn.microsoft.com へと移行され、リダイレクトされるようになっている。

Now Introducing Arm64 Support for VS Extensions!

https://devblogs.microsoft.com/visualstudio/now-introducing-arm64-support-for-vs-extensions/

Visual Studio 2022 の ARM64 版向けの拡張機能がサポートされたというアナウンス。

記事では拡張機能を ARM64 対応にする方法と、Marketplace へのアップロードについて触れている。

.NET Framework September 2022 Cumulative Update Preview

https://devblogs.microsoft.com/dotnet/dotnet-framework-september-2022-cumulative-update-preview/

.NET Framework の2022年9月の累積アップデートのプレビューがリリースされた。

このリリースでは新しいセキュリティー更新はなく、WPF や WinForms、Workflow、ランタイムとネットワーキングに関する修正が含まれている。

Release 2.2.0-beta.1 · mysql-net/MySqlConnector

https://github.com/mysql-net/MySqlConnector/releases/tag/2.2.0-beta.1

Async MySqlConnector 2.2.0-beta.1 がリリースされた。

このリリースでは .NET 7 への対応や DNS チェックの間隔指定の追加されている。

また破壊的変更となる可能性として接続文字列ビルダーでのキーの並び順の正規化により接続文字列が変わる可能性や .NET 4.5 のサポート削除などがあるとしている。

Microsoft Teams Assignments Service's Journey to .NET 6

https://devblogs.microsoft.com/dotnet/microsoft-teams-assignments-service-dotnet-6-journey/

Microsoft Teams Assignments Service を .NET Framework 4.7.2 (ASP.NET Web API) から .NET 6 へ移行した事例。

移行は依存のライブラリーから更新、移植を行い、その後 ASP.NET から ASP.NET Core に移行した。その結果として CPU や待機時間といったものが改善されたが、特に一貫して改善されたのがメモリー使用量だったとのこと。

記事では具体的なワークロードに対するレイテンシーとメモリー使用量の変化を紹介している。

アーティクル、スライドなど

Austin Wise - The ThreadPool in .NET 7 NativeAOT uses the Windows thread pool

https://www.awise.us/2022/09/18/dotnet-nativeaot-windows-threadpool.html

.NET 6 でスレッドプールが C# によるマネージド実装へと変わったが、.NET 7 時点では Windows 上の NativeAOT ビルドでは OS のスレッドプールが使われることについての記事。

ただしこれは現時点でそうなっているだけ(.NET 7 の時点では検討する時間がなかった)であって将来的にどうなるかはまたわからないとのこと。

Counting the leading zeroes in a binary number with C#

https://andrewlock.net/counting-the-leading-zeroes-in-a-binary-number/

指定した数値をビットで見た時、先頭から続く 0 の数をカウントする方法についての記事。

.NET Core 3.0 以降であれば BitOperations.LeadingZeroCount メソッドを利用でき、常に最速であるが、それ以前のランタイムをサポートする必要がある場合は自前で実装する必要があるのでそれを実装するという話。

(C#) Obsolete によるコンパイルエラーを無視する - ネコのために鐘は鳴る

https://ikorin2.hatenablog.jp/entry/2022/09/19/130307

Obsolete 属性の第二引数 errortrue となっている場合でもコンパイルエラーにせず呼び出す方法についての記事。

Unity2020.1~ と Rider を使うとこういう罠を踏むかも - Qiita

https://qiita.com/divideby_zero/items/1aa3c7bedf30e742cdc1

Unity 2020.1 以降では Suppress Common Warnings というよくある警告を抑制する機能があり、その結果未初期化のプライベート変数に関する警告が抑制され、Rider で Initialize field from constructor クイックアクションがうまく発動できないという話。

Roslyn とその活用法

https://speakerdeck.com/nenonaninu/roslyn-tosonohuo-yong-fa

Roslyn の役割の説明と Roslyn を使用して C# から TypeScript の型定義ファイルを生成するツール (Source Generator) を作ったというスライド。

.NET で静的セキュリティコード検査 (Security Code Scan 編)

https://zenn.dev/masakura/articles/5d8525f9ffcf3e

Security Code Scan というオープンソースの静的コード脆弱性診断ツールで C# のコードをスキャンしたり、カスタマイズしたりする方法についての記事。

BlazorBindings.Maui - Preview 9

https://dev.to/dreamescaper/blazorbindingsmaui-preview-9-4iob

MobileBlazorBindings を元にした MAUI 向けの Blazor の形でアプリケーションを実装する BlazorBindings.Maui の Preview 9 がリリースされた。

サードパーティーのコントロールからコードを生成する Component Generator 、影やジェスチャーのサポートの追加が行われている。

[C#] Using GC.KeepAlive in async methods

https://minidump.net/c-using-gc-keepalive-in-async-methods-8d20fd79f0a0

非同期メソッドで GC.KeepAlive を使用しても GC に改修されてしまうケースがあることについての記事。

非同期メソッドはステートマシンに変換されるが、デリゲートをネイティブメソッドに渡している場合にネイティブメソッドの呼び出し中に GC が発生するとオブジェクトが回収されてしまうパターンがある。GC.KeepAlive を呼び出していてもコード的にはわかれてしまうので防げず、これを防ぐには GCHandle.Alloc で保持する必要がある。

C#におけるベクトル的データ構造のパフォーマンス比較①

https://zenn.dev/ysaki51/articles/45d180e3755410

C# (.NET) でのベクトル演算を行ういくつかの方法についてパフォーマンスを比較している記事。

Realtime Database with Firebase in .NET MAUI

https://cedricgabrang.medium.com/realtime-database-with-firebase-in-net-maui-60323460ef7e

Firebase Realtime Database を .NET MAUI で使用する方法についての記事。

Moq vs NSubstitute: syntax cheat sheet

https://dev.to/bellonedavide/moq-vs-nsubstitute-syntax-cheat-sheet-kkf

モックライブラリの Moq と NSubstitute で実現したいことごとにそれぞれのライブラリーでの記述を紹介している記事。

.NETの環境でwin32apiのdllimportを使用して、非スムージングなテキストレンダリングのTextOutを実装する - Qiita

https://qiita.com/belre/items/9c6fb4f4c0340296f451

昔ながらのアンチエイリアスのかかっていないテキストを GDI でレンダリングするという記事。

ASP.NET Core Blazor のイベント ハンドリングをカスタマイズする

https://zenn.dev/okazuki/articles/customize-eventhandlelogic-on-blazor

Blazor のイベントハンドリング処理をカスタマイズする方法についての記事。

Join us for JetBrains .NET Days + GameDev Day Online 2022 | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/09/19/join-us-for-dotnet-days-and-gamedev-day-online-2022/

10/25-27 で JetBrains が .NET とゲーム開発に関するオンラインイベントを行うというアナウンス。

10/25, 26 が .NET Days、10/27 が GameDev Day となっている。

.NET Diagnostic IPC protocol: the C++ way

https://chnasarre.medium.com/net-diagnostic-ipc-protocol-the-c-way-ea5b8024d8d0

.NET の診断 IPC プロトコルを C++ から扱うという記事。

記事では通信方法やプロトコルの内容について触れている。

[ClearScript] F# Interactive から JavaScript を扱う - Qiita

https://qiita.com/Mt_SQ/items/d41f8625565a8841bd68

F# Interactive から ClearScript (JavaScript エンジンブリッジ) を使用して JavaScript を扱うことについての記事。

Firebase Push Notifications in .NET MAUI (iOS)

https://cedricgabrang.medium.com/firebase-push-notifications-in-net-maui-ios-2f4388bf1ac

iOS 上の .NET MAUI アプリケーションで Firebase Push Notifications を扱うことについての記事。

.NET 7の.NET JavaScript interop on WebAssemblyを試す - Qiita

https://qiita.com/yamachu/items/f070ef516c6792ac7e67

.NET 7 で導入される .NET JavaScript interop on WebAssembly という WebAssembly のみを使用する (Non-ブラウザー; 非 Blazor) 仕組みについての記事。

記事では導入とビルドの方法、実際に C# から JavaScript と JavaScript から C# のコードを呼び出す例を Node.js で実行している。

C# Scripting Engine Part 1 – Introduction – Kah Wei, Tng

https://kahwei.xyz/2022/05/07/c-scripting-engine-part-1-introduction/

.NET をホストして C# で実装できるゲームエンジンを作っていくという記事シリーズ。

Architecture of a .NET Application: Case Studies - NDepend

https://blog.ndepend.com/architecture-of-a-net-application-case-studies

NDepend でいくつかのライブラリーやプロダクトから実際に依存関係を出してみたという記事。

DataTable Visualizer Improvements

https://devblogs.microsoft.com/visualstudio/datatable-visualizer-improvements/

Visual Studio 2022 17.4 Preview 2 での DataTable ビジュアライザーの改善について。

IEnumerable ビジュアライザー同様に並べ替えやフィルター、エクスポートとテーマ設定をサポートしている。

It’s finally here. Bicep is in Visual Studio!

https://devblogs.microsoft.com/visualstudio/bicepforvs/

Visual Studio で Bicep をサポートしたというアナウンス。

ライブラリ、リポジトリ、ツールなど

jsuarezruiz/figma-to-maui-graphics: FigmaSharp.Maui.Graphics turns your Figma design into .NET MAUI Graphics code

https://github.com/jsuarezruiz/figma-to-maui-graphics

Figma のデザインを .NET MAUI のコードに変換するツール。

testcontainers/testcontainers-dotnet: 🐋 A library to support tests with throwaway instances of Docker containers for all compatible .NET Standard versions.

https://github.com/testcontainers/testcontainers-dotnet

テスト実行用の使い捨てコンテナー (データベースや Redis など) を取り扱う TestContainers の .NET 向けライブラリー。

README の下記のような形で一時的なコンテナーを作り、そこにアクセスするといったことが簡単にできるようになる。

var testcontainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
  .WithImage("nginx")
  .WithName("nginx")
  .WithPortBinding(80)
  .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(80));

await using (var testcontainers = testcontainersBuilder.Build())
{
  await testcontainers.StartAsync();
  _ = WebRequest.Create("http://localhost:80");
}

サイト、ドキュメントなど

ツイート

Minimal APIs では任意の Delegate を渡しているけどどうやって RequestDelegate にしているの、の回答。RequestDelegateFactory が頑張って動的に生成していますという話。

Generic Math でいろいろなメソッドが直接生えているので Math / MathF を使うことなく int.Abs のような形で呼び出せるようになったという話。