2021-11-05: .NET community support, Advent Calendar, Power Fx

Published on Friday, 05 November 2021

いよいよ来週の11月8日(日本時間11月9日) は Visual Studio 2022 のローンチイベント、翌日11月9日(日本時間11月10日) は .NET Conf 2021 で .NET 6 がリリースとなります。

.NET Conf は各地のローカルコミュニティーイベントもあり、日本では 11/12(金) 22時からのdevblogラジオ がそれとなるようです。


Microsoft の .NET コミュニティーサイトが公開されました。

Q&A がメインのような感じなので Stack Overflow やフォーラムに近い位置づけになりそうです。


Qiita での C# の 2021 年の Advent Calendar ページが公開されました。

12月までは時間があり、枠も空いていますので C# 関連で何か書いてみたい方はお早目の登録をおすすめします。


ローコードツールの Power Apps の言語 Power Fx がオープンソースでリリースされました。

Power Apps は Excel の式のような文法でコードを記述するのですが、その言語部分である Power Fx がオープンソースでリリースされました。これは C# / .NET で実装されており、Power Apps などとは関係なくアプリケーションに組み込むことが可能なものとなっています。

プログラマ向けではないが簡易的なロジックを記述できるような仕組みをアプリケーションに組み込みたい場合などには有用かもしれません。

トピックス

.NET 6 Launches at .NET Conf, November 9-11

https://devblogs.microsoft.com/dotnet/net-6-launches-at-net-conf-november-9-11/

オンラインカンファレンスの .NET Conf が11月9日(日本時間では11月10日午前1時)から始まり3日間開催され、その中で .NET 6 のローンチが予定されている。記事では3日間のカンファレンススケジュールの概要と、コミュニティーイベントの紹介、クイズやSwag (おみやげ) について触れている。

放送は www.dotnetconf.net, Microsoft Learn TV, .NET YouTube channel, Visual Studio Twitch channel で行われ、スケジュールは大まかに Day 1 は .NET 6 について/.NET チームからのセッション/キーノート、Day 2 は .NET に関して深掘りするセッションとローカルコミュニティーのスピーカーによる24時間放送、Day 3 は前日からの24時間放送となっている。

.NET 6 のローンチと .NET Conf に関連して各地でコミュニティーによるローカルイベントも行われる。日本では 11/12(金) 22時からのdevblogラジオ でオンラインの配信イベントがある模様。

最後に20以上のスポンサーが参加する Day 1/2 の Attendee Party で技術的なクイズに答えると賞品が当たるイベントがあること、無料でダウンロード可能な壁紙やテーマなどの Swag があるとのこと。Swag はスポンサー提供のものもあり、抽選でライセンスやバウチャーなどがもらえる。

.NET community support | Microsoft Docs

https://docs.microsoft.com/en-us/answers/products/dotnet

.NET の技術的な Q&A を行える Microsoft のコミュニティーサイトがオープン。

Entity Framework Biweekly Status Updates (2021) · Issue #23884 · dotnet/efcore

https://github.com/dotnet/efcore/issues/23884#issuecomment-961162804

Entity Framework の隔週ステータスアップデートの11月4日号。

ほぼ GA 間近ということもあり、大きなトピックはなく、EF Core 7 の計画が進行中なことや品質やドキュメンテーションなどが進んでいるなど。

Release 2.0.0-rc.1 · mysql-net/MySqlConnector

https://github.com/mysql-net/MySqlConnector/releases/tag/2.0.0-rc.1

Async MySQL Connector 2.0.0-rc.1 がリリースされた。

MySqlBulkCopy の強化、netstandard2.0 のサポートの削除、BigInteger パラメータのサポートなど。

Power Fx: Open source now available | Microsoft Power Apps

https://powerapps.microsoft.com/en-us/blog/power-fx-open-source-now-available/

ローコード開発ツールである Power Apps で使用されている Excel の式のような言語の Power Fx の処理部分がオープンソースでリリースされた。

Power Fx は C# (.NET) にて実装されており Power Apps とは独立してアプリケーションへの組み込みなどが行えるようになっている。また Language Server なども提供されている。

ホスティングのサンプルでは .NET コンソールアプリケーションで REPL 形式で実行するものなどが公開されている。

C#のカレンダー | Advent Calendar 2021 - Qiita

https://qiita.com/advent-calendar/2021/csharplang

2021年の C# の Advent Calendar の Qiita でのまとめ。現在参加者は募集中の様子。

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

Visual Studio 2022 Launch Event Agenda

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-launch-event-agenda/

11月8日(日本時間11月9日)に開催される Visual Studio 2022 のローンチイベントのアジェンダについての記事。

イベントでのセッションの一覧とストリーミングが終わった後に公開される Tips & tricks セッションの一覧が公開されている。

More flexible and inclusive ways to manage your documents

https://devblogs.microsoft.com/visualstudio/personalize-docs/

Visual Studio 2022 で強化されたドキュメント関連の機能についての記事。

タブのプロジェクトごとのカラーリングやタブレイアウト位置の変更、タブの設定(選択中の文字のボールド化や最小最大幅)などについて。

Build client web assets for your Razor Class Library

https://devblogs.microsoft.com/dotnet/build-client-web-assets-for-your-razor-class-library/

Razor Class Library (.razor, .cshtml) にクライアント向けのアセットをビルドして含める方法についての記事。

npm を使用したビルドから NuGet パッケージにするまでについて解説している。

Bite-Size .NET 6 - MaxBy() and MinBy() in LINQ

https://exceptionnotfound.net/bite-size-dotnet-6-maxby-and-minby-in-linq/

.NET 6 で追加される LINQ の MaxByMinBy についての記事。

MaxByMinBy に指定した値のセレクターで最大/最小の要素を返すもの。

C#9.0 配列入りのレコードってどうだろう 【不変型配列レコード】 - Qiita

https://qiita.com/muniel/items/fd843abc55a5626e5c45

record クラスと ImmutableArray で配列も込みで不変なデータを定義する方法についての記事。

Intrinsicsを使ってdouble配列の合計値を計算を高速化

https://zenn.dev/nin_neko/articles/d310270361beba

System.Runtime.Intrinsics の AVX を使用して double の配列を計算する方法とそのパフォーマンスについての記事。

Usage of Consul in .NET Core - Configuration Management

https://dev.to/engincanv/usage-of-consul-in-net-core-configuration-management-39h5

サービスディスカバリーなどのネットワークサービスを提供する HashiCorp Consul の構成管理部分を .NET から利用する方法についての記事。

EF Core 6: Custom functions with DbFunctionAttribute

https://dev.to/timur_kh/ef-core-6-custom-functions-with-dbfunctionattribute-1bb3

Entity Framework Core 6 で DbFunction 属性を持つメソッドを定義することでデータベース関数 (ストアドプロシージャー) を呼び出すことができることについての記事。

Github Copilot With C# .NET - .NET Core Tutorials

https://dotnetcoretutorials.com/2021/10/30/github-copilot-with-c-net/

GitHub Copilot の C# / .NET での対応についてとその使用感についての記事。

Caller Argument Expressions – A Look at New Language Features in C# 10 | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2021/11/04/caller-argument-expressions-in-csharp-10/

.NET 6 で導入された CallerArgumentExpressionAttribute 属性についての解説記事。

CallerArgumentExpression を使用すると、指定したパラメーターに対して呼び出し元で指定された式を文字列として取得できるため Assert のようなケースで役立つ。記事では次のような例が紹介されている。

public static void Main(string[] args)
{
    // What you call
    Assert(args.Length != 1);

    // What gets compiled
    Assert(args.Length != 1, "args.Length != 1");
}

public static void Assert(
    bool condition,
    [CallerArgumentExpression("condition")]
    string conditionExpression = default)
{
    if (!condition)
        throw new Exception($"Condition failed: {conditionExpression}");
}

また、ReSharper と Rider ではコード解析により、CallerArgumentExpression のパラメーターに値を渡すようなコードや存在しないパラメーター名を指定した場合に警告するといった機能があることにも触れている。

.NET System.Random の実装と欠陥について ~ 重箱の隅をつつきたおす ~ - 屋根裏工房改

https://andantesoft.hatenablog.com/entry/2021/01/09/203050

System.Random の実装とその性質や問題点について詳しく解説している記事。

.NET 6: スレッドの改善

https://www.infoq.com/jp/news/2021/11/net6-Threading/

.NET 6 で改善されたスレッド周りの機能についての記事。

Parallel.ForEachAsyncThread.ManagedThreadId, Thread.UnsafeStart やタスクベースのタイマーについてなど。

.NET Annotated Monthly | November 2021 | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2021/11/02/net-annotated-monthly-november-2021/

JetBrains による .NET 関連の情報まとめ11月号。

Finding .NET Memory Leaks through Soak Testing

https://dev.to/k6/finding-net-memory-leaks-through-soak-testing-2ibe

メモリーリークを発見するために耐久性テスト(Soak Testing)を行うことについての記事。

記事では k6 を使用して継続的に負荷をかけることでメモリーリークを発見するといった手法を紹介している。

HostBuilder and Host for Windows App SDK

https://dev.to/sharpninja/hostbuilder-and-host-for-windows-app-sdk-4lf4

Windows App SDK のアプリケーションにおいて HostBuilder と Host (Generic Host) を使用する方法についての記事。

いくつかプロジェクトの設定の変更と外部ライブラリー(WindowsAppSdkHost)の使用が必要となるものの HostBuilder スタイルを使用することが可能。

Static Analysis of (the Invisible) C# Sources | by Leandro T. C. Melo | Nov, 2021 | ShiftLeft Blog

https://blog.shiftleft.io/the-invisible-c-code-51f008d8930

C# コンパイラーが生成するような見えないコードを静的解析するために C# のコードを展開するリライターを開発したという記事。例えば文字列補完式を展開するといったことを行う。

.NET Code coverage on GitLab

https://medium.com/tuimm/net-code-coverage-on-gitlab-3e35f08d0f44

GitLab 上で .NET のコードのカバレッジを取得し、レポートする方法についての記事。

Anomaly Detection Using ML.NET

https://www.infoq.com/articles/anomaly-detection-ml-net/

ML.NET を使用して異常検知 (Anomaly Detection) を実装することについての記事。

Improving logging performance with source generators: Exploring .NET Core 6 - Part 8

https://andrewlock.net/exploring-dotnet-6-part-8-improving-logging-performance-with-source-generators/

ILogger を使用する場合のパフォーマンスの注意点と .NET 6 から導入された Logger の Source Generator を使用する方法についての記事。

それぞれのケースにおいてのベンチマーク結果なども載せている。

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

GitHub - badamczewski/PowerUp: Decompilation Tools and High Productivity Utilities

https://github.com/badamczewski/PowerUp

.cs や .il ファイルを監視してコンパイルした際の JIT コンパイル結果を出力したり、簡易ベンチマークを実行したりできるツール群。

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

ASP.NET Core Blazor WebAssembly のセキュリティに関するその他のシナリオ

https://docs.microsoft.com/ja-jp/aspnet/core/blazor/security/webassembly/additional-scenarios?view=aspnetcore-5.0

Blazor WebAssembly でアプリケーションを構築する上でセキュリティー関連を中心としたシナリオごとの情報がまとまっているドキュメント。

ツイート

self-contained なアプリケーションの発行時に使用できるトリミングでの警告についての話。(なお .NET 5 まではトリミングはプレビュー機能)

メソッドが潜在的にリフレクションや動的コードを使用している(トリム安全ではない)ことを伝える RequiresUnreferencedCode属性 や動的にアクセスされることがあることをトリマーに伝える DynamicallyAccessedMembers 属性などでトリミング時に警告できるようになった。

一見単純なケースでも文字列補完式はボックス化や String.Format の呼び出しなどがあるからインライン化されないことがあるという話。

.NET 6 で Math クラスに追加されたメソッドとオーバーロードについての話。

.NET 6 では.NET 5 の時よりも積極的なインライン化が効果的に働くことがあるという話。

Deep Dive

Vectorize SpanHelpers<T>.IndexOf by alexcovington · Pull Request #60974 · dotnet/runtime

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

各種コレクションなどの内部で使用している SpanHelper<T>.IndexOf の処理をベクトル化する PR。

Add instructions for using Codespaces by eerhardt · Pull Request #60996 · dotnet/runtime

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

GitHub Codespaces を使用して開発する手順書の PR。

Update the interpolated string handler spec by 333fred · Pull Request #5365 · dotnet/csharplang

https://github.com/dotnet/csharplang/pull/5365

Interpolated string handler をメンバー初期化子のインデクサーで使用したときの制限についての記述を追加した PR。

[Proposal]: Collection literals · Issue #5354 · dotnet/csharplang

https://github.com/dotnet/csharplang/issues/5354

ターゲットの型から類推してコレクションを作成するためのリテラル文法を導入したいという提案。

Remove Libuv transport and dependency by Tratcher · Pull Request #38005 · dotnet/aspnetcore

https://github.com/dotnet/aspnetcore/pull/38005

.NET 5.0 の ASP.NET Core (Kestrel) から obsolete となっていた Libuv トランスポートを削除する PR。

Add proposal for params Span<T> by cston · Pull Request #5382 · dotnet/csharplang

https://github.com/dotnet/csharplang/pull/5382

params Span<T> の提案実装の PR。

NativeAOT in .NET 7 · Issue #61231 · dotnet/runtime

https://github.com/dotnet/runtime/issues/61231

.NET 7 の NativeAOT に向けてのタスクリスト Issue。

スコープ外とされているものは ASP.NET MVC や WPF のようなリフレクション依存フレームワーク、MSBuild のような動的アセンブリーロードを含むアプリケーション、Mono が現在提供中のモバイルと WASM となっている。

Adding support for X86Base.Pause() and ArmBase.Yield() by tannergooding · Pull Request #61065 · dotnet/runtime

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

x86 の PAUSE インストラクションと ARM の YIELD インストラクションのサポートを追加する PR。

スピンウェイトの改善のために導入したいという目的のよう。

Memory allocation in .NET fails at 70% of the container limit when running in Kubernetes · Issue #61076 · dotnet/runtime

https://github.com/dotnet/runtime/issues/61076

Kubernetes というかコンテナー上で .NET アプリケーションを動かすとメモリーのリミットの70%で Out-of-Memory になるという Issue。

.NET GC のデフォルトは 75% を割り当て上限として扱っていて、残りは .NET のネイティブ部分や外部ライブラリーで使用されることを期待している。このケースでは 75% のうち 5% はランタイムがコードに対して使用しているため 70% で落ちているのではないか、この閾値は GC 設定の System.GC.HeapHardLimitPercent を設定することで変更できるといった話。

Allow running simple .exe files without .runtimeconfig.json · Issue #22384 · dotnet/sdk

https://github.com/dotnet/sdk/issues/22384

dotnet myapp.exe で .runtimeconfig.json がないようなシンプルな実行ファイル、例えば net472 なものを指定したときにも実行できていいのでは?という Issue。

.NET Core でもないものを動かせる必要があるのかそれならばネイティブバイナリも動かせる必要があるのではないかといったツッコミも入っている。