2022-11-30: AppHarbor is Shutting Down, C# for Babies, Newtonsoft.Json 13.0.2, ComputeSharp 2.0

Published on Wednesday, 30 November 2022

トピックス

AppHarbor is Shutting Down - AppHarbor

https://blog.appharbor.com/2022/11/09/shutting-down-appharbor

.NET アプリケーションのホスティングサービス AppHabor が12月5日にサービス終了のアナウンス。(11月9日付)

期日以降は Web サイトやアプリケーション、データベースなどを含め、すべてのデータにアクセスできなくなる。

C# for Babies

https://lp.jetbrains.com/csharp-for-babies/

JetBrains による赤ちゃんに C# を理解できるようにするための電子書籍。

A から Z までの単語についてイラストと簡単な説明をつけている絵本。

Release 13.0.2 · JamesNK/Newtonsoft.Json

https://github.com/JamesNK/Newtonsoft.Json/releases/tag/13.0.2

Newtonsoft.Json (JSON.NET) 13.0.2 がリリースされた。

このリリースでは DateOnly や TimeOnly のサポートや UnixDateTimeConverter.AllowPreEpoch の追加などいくつかの新機能と不具合の修正が行われている。

Announcing ComputeSharp 2.0 — run C# on the GPU with ease through DirectX 12 and D2D1!

https://sergiopedri.medium.com/announcing-computesharp-2-0-run-c-on-the-gpu-with-ease-through-directx-12-and-d2d1-be4f3f2312b4

ComputeSharp 2.0 がリリースされた。

2.0 では大きく書き直され、ランタイムコード生成の代わりとなるソースジェネレーターや多くの新しい API、D2D1 ピクセルシェーダーのサポート、UWP と WinUI 3.1 との統合のための XAML コントロールの導入といった変更が行われた。

記事では ComputeSharp の紹介、動作の仕組み、XAML サポートと D2D1 ピクセルシェーダーといった部分を紹介している。

.NET MAUI is now available in Visual Studio for Mac 17.4 - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/net-maui-is-now-available-in-visual-studio-for-mac-17-4/

Visual Studio for Mac 17.4 での .NET MAUI の対応がリリースされた。

Windows の Visual Studio と同様に .NET MAUI の開発に必要な機能の多くが利用可能となった。 また、XCode 14.1 への対応は近日中にリリースされ、今後は C# のホットリロードや XAML のライブプレビューといった機能の実装も予定しているとのこと。

Rider 2022.3 EAP 9

https://www.jetbrains.com/rider/nextversion/

Rider 2022.3 EAP 9 (早期アクセスプレビュー) がリリースされた。

このリリースでは .NET 7 SDK のサポート(プロジェクトテンプレートの更新や Central Package Management、C# 11 など)、Unreal Engine 5.1 のサポート、バックエンドの .NET 7 への移行によるパフォーマンス改善、新しいツールバー UI のデフォルト化、C# の機械学習によるコード補完といったものが含まれている。

ReSharper 2022.3 EAP 9

https://www.jetbrains.com/resharper/nextversion/

ReSharper 2022.3 EAP 9 (早期アクセスプレビュー) がリリースされた。

このリリースでは EAP 8 での ARM64 サポートが拡充され、dotCover, dotTrace, dotMemory そして ReSharper のコマンドラインツールが ARM64 に対応した。その他正式リリースに向けて不具合の修正が行われている。

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

.NET Serialization Roundup 2022

https://aloiskraus.wordpress.com/2022/11/23/net-serialization-roundup-2022/

.NET の様々なシリアライザー(バイナリーや JSON)のシリアライズ、デシリアライズのパフォーマンス比較を行っている記事。

記事ではシリアライズ/デシリアライズのパフォーマンスのほか、起動時のパフォーマンスに関しても計測、比較している。

Improve your productivity with Web Live Preview and Telerik - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/improve-your-productivity-with-web-live-preview-and-telerik/

Visual Studio 2022 での ASP.NET Web フォームを実行時プレビューを行う Web Live Preview についての紹介記事。

記事では Web Live Preview の有効化と利用方法、Telerik のコンポーネントのようなサードパーティーコンポーネントとの統合の様子などを紹介している。

C# List Pattern Examples | You've Been Haacked

https://haacked.com/archive/2022/11/22/csharp-list-pattern/

C# 11 のリストパターンのコード例を紹介している記事。

.NET 7 Removes Its Insecure XmlSecureResolver

https://www.infoq.com/news/2022/11/XmlSecureResolver/

.NET 7 では XmlSecureResolver が廃止されたことについての記事。

XmlSecureResolver は外部リソースを参照することで発生する XXE を回避するため使用が推奨されていたが、コードアクセスセキュリティー (CAS) を元に実装されていたが .NET Core 以降は CAS を持たず制限がかからない状態となっていたため .NET 7 で廃止となった。型は残っているものの参照するとビルド時に警告が出力され、実行時には例外が発生する。

外部リソースを制限するには XmlSecureResolver の代わりに XmlResolver.ThrowingResolver を使用することが推奨のアクションとなっている。

ASP.NET Core Razor PagesでIAsyncPageFilterを実装する - Qiita

https://qiita.com/gushwell/items/bcf39aaf708b9a483cf5

ASP.NET Core Razor Pages におけるページのフィルター処理を実装する方法についての記事。

Azure ADでログインしてBlazor WASM→ASP.NET Core WebAPI→MS Graph APIを呼びたい

https://zenn.dev/okazuki/articles/auth-blazorwasm-aspnetcore-obo

Azure AD にログインする Blazor WebAssembly のアプリケーションから ASP.NET Core Web API で Microsoft Graph API を呼び出す方法についての記事。

クライアントから直接 Graph API を呼び出すのではなく、代わりにサーバーアプリケーションが呼び出すフロー(On-Behalf-Of フロー)の使用と構築方法。

The dangers and gotchas of using scoped services in OptionsBuilder

https://andrewlock.net/the-dangers-and-gotchas-of-using-scoped-services-when-configuring-options-with-options-builder/

OptionsBuilder を使用した構成の構築にスコープ付きサービスを使用する場合の危険性と落とし穴についての記事。

.NET 7 Adds Aggressive Garbage Collection for Kubernetes

https://www.infoq.com/news/2022/11/GCCollectionMode-Aggressive/

.NET 7 で導入された GCCollectionMode.Aggressive についての記事。

GCCollectionMode.AggressiveGC.Collect で GC を行う際に可能な限りメモリーを開放するというモード。これはコンテナー上のワーカーのようなアイドル時間が長く、待機中はメモリーも殆ど使用しないというケースで、完全にシャットダウンはしたくないが待機中のリソースの使用量は押さえたいというようなケースで役立つ。

Build and publish Visual Studio extensions with GitHub Actions

https://blog.elmah.io/build-and-publish-visual-studio-extensions-with-github-actions/

GitHub Actions で Visual Studio 拡張をビルドしてパブリッシュ(VSIX パッケージの生成)を行う方法についての記事。

AndroidでASP.NET Coreを動かす - Qiita

https://qiita.com/karuakun/items/c8439d0aadb2e798cf08

Android で Termux を使い、Ubuntu を動作させ .NET SDK をインストールして ASP.NET Core アプリケーションを実行するという記事。

.NET でも .NET でなくても静的セキュリティコード検査 (Semgrep 編)

https://zenn.dev/masakura/articles/b84642b5bd680f

静的セキュリティコード検査を行うオープンソースの Semgrep を使用して C# のコードを検査する使い方についての記事。

MagicOnionで大きな複合データオブジェクトを送受信する方法 - Qiita

https://qiita.com/mxProject/items/838ef3e5e2856c66a29c

MagicOnion でストリーミングを使用することで大きなデータを送受信する方法についての記事。

Confusing .NET Decompilers: The CallVirt OpCode

https://washi.dev/blog/posts/confusing-decompilers-with-callvirt/

仮想関数テーブルのインデックスが同じであれば異なる型でも IL 上は CallVirt で呼び出すことができてしまい、デコンパイラーはそれをうまく取り扱えないといったことについての記事。

Lambda Cold Starts - .NET 7 Native AOT vs .NET 6 Managed Runtime | no dogma blog

https://nodogmablog.bryanhogan.net/2022/11/lambda-cold-starts-net-7-native-aot-vs-net-6-managed-runtime/

AWS Lambda でのコールドスタートの時間を .NET 7 の Native AOT と .NET 6 のランタイムで比較した記事。

Parsing the “nettrace” stream of (not only) events

https://chnasarre.medium.com/parsing-the-nettrace-stream-of-not-only-events-8b95c7f82ec4

.NET の診断プロトコルの "nettrace" ストリームの形式とパースする方法についての記事

dotNETConf/2022/MainEvent/Technical at main · dotnet-presentations/dotNETConf · GitHub

https://github.com/dotnet-presentations/dotNETConf/tree/main/2022/MainEvent/Technical

.NET Conf 2022 で使用されたスライド集。

デスクトップのブラウザやプレーヤーのサウンドデータを横取りしてスペアナ風の表示をしてみた - Qiita

https://qiita.com/osamus/items/5093cefe20e8f817bbef

BASS というオーディオを扱うライブラリーを使用してスペアナ風のビジュアライザーを実装した際のポイントなどをまとめている記事。

[C#]MemoryPackを使ってみたい7 - ある程度動くサンプル1

https://spacekey.dev/memorypack-7

MemoryPack を使用して ASP.NET Core の API サーバーと Nuxt による Web フロントエンドで通信処理を行うアプリケーションを実装してみたという記事。

Frozen collections in .NET 8

https://steven-giesel.com/blogPost/34e0fd95-0b3f-40f2-ba2a-36d1d4eb5601

.NET 8 で導入予定の Frozen Collections についての記事。

Frozen Collections と既存の IReadOnlyList<T> や Immutable Collections との違い、パフォーマンスなどについて紹介している。

Removing out-of-support components from your Visual Studio installations - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/removing-out-of-support-components-from-your-visual-studio-installations/

Visual Studio 2022 17.4 のインストーラーからサポート対象外となったコンポーネントを削除する機能についての解説記事。

新しいインストーラーではサポート対象外となったコンポーネントを一括で削除できるようになり、記事ではその操作方法などを紹介している。

この削除機能はインストーラーが新しくなっていれば Visual Studio 2022 のすべてのバージョンに対して実行可能となり、Visual Studio 2019 や 2017 の環境であっても 2022 インストーラーをインストールすることで対応が可能とのこと。

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

MichalStrehovsky/PublishAotCompressed

https://github.com/MichalStrehovsky/PublishAotCompressed

Native AOT でパブリッシュする際に UPX で実行ファイルを圧縮するという MSBuild の拡張パッケージ。

dhq-boiler/boilersE2E: Support your E2E testing

https://github.com/dhq-boiler/boilersE2E

Windows デスクトップアプリケーションの E2E テストを行う際のヘルパーとなるライブラリー。Windows Application Driver の起動と終了、タイムアウト付き要素検索など。

kalk

https://kalk.dev/

様々な計算や変換、Hardware Intrinsics の実行などが行える開発者向けコマンドライン計算機。

ForNeVeR/AvaloniaRider: JetBrains Rider plugin for Avalonia development

https://github.com/ForNeVeR/AvaloniaRider/

Rider で Avalonia を開発サポートするためのプラグイン。プレビューやテンプレートなどが提供される。

lowleveldesign/windbg-ext-template: A template for creating managed WinDbg extensions

https://github.com/lowleveldesign/windbg-ext-template

WinDbg で .NET をホストしてマネージドコードで拡張関数を実装するためのテンプレート。

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

Home | endoflife.date

https://endoflife.date/

様々なフレームワークやプロダクトの End-of-Life の日付をまとめているサイト。

ツイート

ESP32-C3 向けの .NET nanoFramework ファームウェアイメージがリリースされ、RISC-V で .NET が動くという話。

Alexandre Mutel: "One of the super cool feature of NativeAOT with .…" - Mastodon

https://mastodon.social/@xoofx/109423020409800983

One of the super cool feature of NativeAOT with .NET 7 is "Direct PInvoke calls" or the ability to link against a static library https://github.com/dotnet/runtime/blob/main/src/coreclr/nativeaot/docs/interop.md and call functions directly. There is no built-in support to distribute such things with NuGet (e.g like runtime folder) but it's easy to ship a package that would provide dynamic libraries but could also provide support for statically linked libraries and inject it automatically via a MSBuild target. I love this feature! 😎

.NET 7 の NativeAOT では直接 P/Invoke 呼び出しと静的ライブラリリンクがサポートされているという話。