2022-08-22: .NET 6 is now in Ubuntu 22.04, Avalonia 11.0 Preview 1, Bringing Kestrel + YARP to Azure App Services

Published on Monday, 22 August 2022

トピックス

.NET 6 is now in Ubuntu 22.04

https://devblogs.microsoft.com/dotnet/dotnet-6-is-now-in-ubuntu-2204/

.NET 6 が Ubuntu 22.04 (Jammy) の公式配布に含まれるようになったアナウンス。

Canonical とのパートナーシップにより .NET 6 が Ubuntu の一部として配布されるようになった。これにより apt パッケージマネージャーからパッケージソースの追加なしに apt install dotnet6 でインストールできるようになる。

また同時に .NET 6 の Chiseled Ubuntu コンテナーイメージも公開された。Chiseled Ubuntu コンテナーイメージは通常のコンテナーイメージと異なり、パッケージマネージャーやシェル、root といったものが削除された極小サイズのイメージとなっている。必要最低限のコンポーネントを含むイメージとなっているため、アタックサーフェスを小さくできる。なお、Chiseled イメージには ICU が含まれていないため、Globalization Invariant モードが有効となっている点に注意が必要。

記事では apt パッケージマネージャーからのインストールについてとコンテナーイメージの利用方法や注意点について触れている。

Turning it up to 11! - Avalonia UI

https://dev.to/avalonia/turning-it-up-to-11-34jn

Avalonia 11.0 Preview 1 がリリースされた。

記事ではこのリリースで含まれる新機能や改善点について紹介している。

  • プラットフォームサポートの拡大
    • iOS, Android, ブラウザー
  • 新しいビジュアルレイヤー (コンポジションレンダラー)
    • 効率の良いレンダラーで 240fps の達成
  • フル機能のテキストレンダリングとレイアウト
    • RTL を含む Unicode サポート
    • リッチテキストとインラインサポート、TextFormatter API サポート
    • すべてのプラットフォームでの IME のサポート
  • アクセシビリティー (Windows と macOS)
  • 自動テスト
  • コントロールのテーマの改善
  • パフォーマンスの向上
    • リソースのオンデマンドローディング
    • XAML コンパイラーによる出力される MSIL の削減
    • スタイリングシステムとレンダラーの最適化

Avalonia 11.0 Preview 1 は NuGet から利用可能となっている。

A Heavy Lift: Bringing Kestrel + YARP to Azure App Services

https://azure.github.io/AppService/2022/08/16/A-Heavy-Lift.html

Azure App Services のフロントエンドとなるリバースプロキシーを HTTP.sys + ARR から Kestrel + YARP へと移行していることについての記事。

記事では App Services の構成、YARP への移行の理由、移行までの期間、移行中に遭遇したバグといったものを紹介している。

移行後には FrontEndRole のパフォーマンスがスループットにして80%向上したこと、Linux の App Service も Nginx から同様の Kestrel + YARP に移行することで同じコードベースで gRPC をはじめとして様々な機能を提供できるようになるとのこと。

Release Version 7.0.0 · graphql-dotnet/graphql-dotnet

https://github.com/graphql-dotnet/graphql-dotnet/releases/tag/7.0.0

GraphQL for .NET 7.0.0 がリリースされた。

このバージョンではデーターローダーの結果のメモリー使用量の削減、検証ルールの非同期サポート、API の改善、CLR 型からのインターフェースグラフといった対応が含まれている。

.NET Conf Focus on MAUI - That's a wrap!

https://devblogs.microsoft.com/dotnet/dotnet-conf-focus-on-maui-recap/

.NET Conf Focus on MAUI のスライドやリンクをまとめた記事。

What's New in Visual Studio 2022 17.4 Preview 1 - Visual Studio Blog

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

Visual Studio 2022 17.4 Preview 1 の新機能について紹介している記事。

  • エンタープライズサポート: LTSC
  • Arm64 サポート
    • UWP ワークロードのサポート
  • Visual Studio 管理テンプレート (ADMX/ADML) による Visual Studio の管理
  • サポート対象外のコンポーネントの削除機能
  • Git ツール
  • コード検索
  • 選択マッチハイライト
  • 生産性
    • C#: ドキュメントアウトラインでファイルのシンボルツリーの確認
    • C++: “Navigation after Create Declaration/Definition” のオプション
    • C++: ARM64 の CMake と Ninja のサポート
    • C++: 接続マネージャーからの SSH プロキシージャンプ
    • C++: C++ 23 対応
    • F#: ローカル関数の引数のツールチップ

Live Share: Enterprise Policies are here! - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/ls-policies/

最新の Visual Studio Live Share と管理テンプレートで Live Share のポリシーを構成できるようになった。

これにより組織外のユーザーとセッションの共有を拒否することや匿名ゲストの無効化といった構成が可能となった。

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

Directory.EnumerateFiles メソッドの予期しない挙動について - 鷲ノ巣

https://tech.blog.aerie.jp/entry/2022/08/13/083935

Directory.EnumerateFiles メソッドのワイルドカードの取り扱いが .NET Framework では予期せぬ結果となる可能性がある挙動であることについての記事。

記事では * ワイルドカードに加えて ? ワイルドカードの挙動についても触れている。

"React での ASP.NET Core" テンプレートで生成されるプロジェクトの仕組みを調べてみた | @jsakamoto

https://devadjust.exblog.jp/29304896/

ASP.NET Core の React を使用するテンプレートで作成したプロジェクトを実行する際に、どのようにして JavaScript を処理することでシームレスな起動が行われるようになっているのかについての記事。

Managing the most dangerous constructor ever - Ayende @ Rahien

https://ayende.com/blog/198081-A/managing-the-most-dangerous-constructor-ever

X509Certificate2 のコンストラクターを使用すると裏でファイルを作成しているため正しく処理しないとファイルが残ってしまって危険、しかし即開放すると非同期のようなケースで壊れてしまうのでそうはいかないという記事。

Tracking down RavenDB I/O usage in Linux - Ayende @ Rahien

https://ayende.com/blog/197985-A/tracking-down-ravendb-i-o-usage-in-linux

Linux 上で RavenDB の I/O 使用の詳細を探った方法についての記事。

Building a custom Configuration Provider in .NET 6

https://medium.com/@luisalexandre.rodrigues/building-a-custom-configuration-provider-in-net-6-fb6c4caae4bd

Microsoft.Extensions.Configuration の Configuration Provider を実装する方法についての記事。

.NET CoreのプロジェクトをGitLab CI/CDでECSに自動デプロイさせる - Qiita

https://qiita.com/waka0238/items/a5d5f1167efca178f775

.NET アプリケーションを GitLab CI/CD を使用して Amazon ECS にデプロイする方法についての記事。

The Code Blogger - .NET 7 – Important Breaking Changes for Web Developers

https://thecodeblogger.com/2022/08/13/net-7-important-breaking-changes-for-web-developers/

.NET 7 で行われる破壊的変更について紹介している記事。

記事では API コントローラーのパラメーターへ推測による DI、Microsoft.Data.SqlClient のアップデート、SignalR の Hub のパラメーターの DI による解決といった点を紹介している。

C# file nesting in VSCODE

https://dev.to/wahidd/c-file-nesting-in-vscode-1em4

Visual Studio Code のファイルネスト機能で .cs ファイルをネストさせる設定についての記事。

New in Entity Framework 7: Bulk Operations with ExecuteDelete and ExecuteUpdate

https://dev.to/timdeschryver/new-in-entity-framework-7-bulk-operations-with-executedelete-and-executeupdate-1nh2

Entity Framework 7 の ExecuteDeleteExecuteUpdate による一括操作についての記事。

ソースジェネレータとInternalsVisbleToの組み合わせで発生するCS0436を緩和する

https://zenn.dev/benutomo/articles/b29f72366023b9

InternalsVisibleTo を使用しているプロジェクトでソースジェネレーターが生成したマーカー用の属性が別なアセンブリーからもアクセスできるようになってしまい、それぞれのアセンブリーでマーカー属性クラスを持つことになり名前が競合しているという警告が出てしまう問題を解消する方法についての記事。

プロジェクト AB があり、それぞれがソースジェネレーターを参照したことでそれぞれに internal class Marker : Attribute {...} という属性クラスのコードが生成された場合に、AInternalsVisibleToB に対して internal を公開すると B からは AMarkerBMarker の両方が見えて競合してしまうという問題。

Git Line-staging Released! - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/git-line-staging-released/

Visual Studio 2022 で Git の行ステージングがサポートされたことについての紹介記事。

How I am using IActionConstraintFactory to handle content negotiation

https://medium.com/codex/how-i-am-using-iactionconstraintfactory-to-handle-content-negotiation-c6bed3e66b89

IActionConstraint を使用して、リクエストのヘッダーなどを条件に実行するアクションを切り替える(コンテントネゴシエーション)方法についての記事。

Securing Amazon API Gateway with Lambda Authorizer in .NET - Detailed Guide

https://codewithmukesh.com/blog/aws-lambda-authorizer-in-dotnet/

.NET で Lambda オーソライザーを実装して Amazon API Gateway を保護する方法についての記事。

xUnitでExceptionをテストする - Qiita

https://qiita.com/mkuwan/items/bc301ffef32044c148e8

xUnit で例外がスローされることをテストする方法についての記事。

【C#】record 型のプロパティへのドキュメント コメントの書き方

https://zenn.dev/naminodarie/articles/933cc96767e1d1

record 型のプロパティーのドキュメントコメントについての記事。

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

spectresystems/snitch: A tool that help you find duplicate transitive package references.

https://github.com/spectresystems/snitch

プロジェクトの参照している NuGet パッケージを間接的に参照しているものも含めて走査して、重複を確認できるツール。

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

独習C# 第5版 | 翔泳社

https://www.shoeisha.co.jp/book/detail/9784798175560

C# の入門書である「独習 C#」の C# 10 に対応した改訂版。

ツイート

2019年以降大幅に書き換えが行われた ClangSharp v14.0.0-rc1 が公開されたという話。P/Invoke Generator というツールも更新され、C ヘッダーファイルから C# へのバインディングを生成できる、など。

Deep Dive

Major compiler slowdown due to changes in .NET GC between .NET 7 preview2 and .NET 7 preview3 · Issue #13730 · dotnet/fsharp

https://github.com/dotnet/fsharp/issues/13730

.NET 7 Preview 7 で F# コンパイラーがとても遅くなったという Issue。

.NET 7 Preview 7 では GC Region が有効になっているなど GC に大きく手が入っているためではないか、Workstation GC から Server GC にすることで改善する、といった話が出ている。

Remove ThreadPool native implementation by eduardo-vp · Pull Request #71719 · dotnet/runtime

https://github.com/dotnet/runtime/pull/71719

.NET 7 ではネイティブのスレッドプール実装が削除されるという PR。(.NET 6 からデフォルトでマネージコードによるスレッドプール)