dotnet
コマンドから一度削除された Hot Reload が戻ってきました。
削除に対するプロセスがあまり健全ではなく、コミュニティーからの大きな反発を受けて revert される形となりました。また Rider もホットリロードのサポートをアナウンスしています。
Visual Studio 2022 の RC3 と Preview 7 がリリースされています。RC2 / Preview 6 同様、更新内容は不具合の修正です。
GitHub Universe 2021 が10月27日、28日に開かれました。
その中で新しい Issue のベータ公開やコマンドパレット機能、 Codespaces に関する CLI ツールの強化といった新機能がいくつか発表されています。
Raspberry Pi Zero 2 W が発表されました。
Raspberry Pi Zero では SoC に BCM2835 (ARM11 コア, ARMv6 アーキテクチャー) が搭載されていましたが、Zero 2 では Raspberry Pi 3 と同じ BCM2710A1 (Cortex-A53 コア, ARMv8 アーキテクチャー) となっています。
.NET Core や .NET 5 以降では ARM アーキテクチャーをサポートしていますが、サポートするアーキテクチャーの下限は ARMv7 となっており、ARMv6 の Raspberry Pi Zero では動作しませんでした。今回 ARMv8 アーキテクチャーとなることで .NET アプリケーションの動作が可能となることが期待できます。
スイッチサイエンスによるとまだ工事設計認証が取得できていないので日本での販売は少し先になるようです。
- Arm6 Raspberry PI Zero - PI 1 · Issue #7764 · dotnet/runtime
- Raspberry Pi財団が2021年10月28日に新製品「Raspberry Pi Zero 2 W」を発表、スイッチサイエンスウェブショップでも近く発売予定
トピックス
.NET Hot Reload Support via CLI
https://devblogs.microsoft.com/dotnet/net-hot-reload-support-via-cli/
削除されたホットリロードを戻す Pull Request を取り込み、GA に含まれるアナウンス。
記事では Visual Studio を優先したため削除したといった経緯などについても触れている。
What’s new in the Rider 2021.3 EAP5
https://twitter.com/jetbrainsrider/status/1451555367117275163
Rider 2021.3 EAP5 がリリースされた。
.NET 6 のホットリロードサポートの追加、.NET 5/.NET Core 3.x の XAML プレビュー対応、NuGet のバインディングリダイレクト、Unity サポートの向上などが含まれる。
.NET のホットリロードサポートは .NET 6 をターゲットとしたときに利用可能となる。ASP.NET Core であれば Razor テンプレート、それ以外のアプリケーション形式(コンソールアプリケーション、Windows Forms、WPF、WinUI 等)であっても機能するが、現状 C# のホットリロードにフォーカスしているため XAML のホットリロードは限定的となっている。
その他、現状の制限事項として下記のものが挙げられている。
- ASP.NET Core アプリケーションの自動ページリロード機能がない
- デバッグ実行中のホットリロードは Windows に限定される
- F# と VB ではホットリロードがサポートされない
その他、.NET 5 と .NET Core 3.x の XAML プレビューに対応 (.NET 6 の対応は含まれない)、.NET Framework アプリケーションのプロジェクトで NuGet のバインディングリダイレクトを自動生成処理の追加、フォーマットとクリーンアップで複数のファイルやディレクトリを対象にできるようになった、Unity 向けの対応として .asmdef の条件付きシンボルの対応や Apple Silicon の Mac でファイルを Unity から開けない不具合の修正など。
- Hot Reload for .NET 6 in Rider 2021.3 | The .NET Tools Blog
- Early Access Program - Rider: Cross-platform .NET IDE
ReSharper 2021.3 EAP5 is here!
https://twitter.com/resharper/status/1451551846280138754
ReSharper 2021.3 EAP5 がリリースされた。
メンバー実装のガターマークの最適化が行われデフォルトで有効化、dotPeek においてレコード型とレコード構造体に対応、dotTrace、dotCover、dotMemory のコマンドラインツールが Apple Silicon のネイティブビルドで提供されるようになったなど。
ReSharper 2021.3 EAP5 is here!
— JetBrains ReSharper (@resharper) October 22, 2021
📈 Optimized gutter marks for member implementation
🆙 Support for records and record structs in dotPeek
🍏 Command Line Tools for dotTrace, dotCover, and dotMemory support Apple silicon https://t.co/PeC86UzarO pic.twitter.com/hzXkbbV0xx
Visual Studio 2022 version 17.0 RC3 and Preview 7
https://docs.microsoft.com/en-us/visualstudio/releases/2022/release-notes-preview#17.0.0-pre.7.0
Visual Studio 2022 version 17.0 RC3 と Preview 7 がリリースされた。
Windows Forms のデザイナーの修正や Xamarin.Forms のテンプレートの更新、ホットリロードをはじめとする不具合の修正を含む。
Everything new from Universe 2021 | The GitHub Blog
https://github.blog/2021-10-27-everything-new-from-universe-2021/
GitHub Universe 2021 が10月27日、28日に開かれ、GitHub に関するアナウンスがあった。
- 新しい Issue (Project) が公開ベータへ
- GitHub Discussion の改善
- ラベルが追加
- GitHub Actions との連携
- 将来的な機能として Poll (投票) と Community insight ダッシュボードの提供を予定
- GitHub Actions の強化
- コマンドパレット
- Ctrl-K/Cmd-K で呼び出せる Visual Studio Code などにあるものと似たツール
- Pull request merge queue の Limited Beta
- GitHub Codespaces の強化
- devcontainer feature
- 定義済みの devcontainer にツールなどを簡単に追加できる仕組み
- GitHub CLI による Codespaces の作成や SSH での接続、ポートフォワーディングなど
- devcontainer feature
You can now use the cmd-k / ctrl-k keyboard shortcut to navigate around GitHub without taking your hands off the keyboard. https://t.co/H31sg6BdRl pic.twitter.com/TbCjGcZt6T
— GitHub (@github) October 27, 2021
🚢@github Codespaces + cli. Codespaces from your home in the terminal. ssh and make something great! pic.twitter.com/Wa2zGC7Cpr
— Cory Wilkerson (@corywilkerson) October 27, 2021
The new Issues public beta is available to everyone, no sign up required. Learn more at https://t.co/H31sg6BdRl pic.twitter.com/swOMyNBuRN
— GitHub (@github) October 27, 2021
Windows Terminal Preview 1.12 Release
https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-12-release/
Windows Terminal Preview 1.12 がリリースされた。
様々なアプリケーションから起動されるデフォルトターミナルの設定を Windows Terminal に変更できるようになった。Windows Insider Program Dev Channel または Windows 11 で利用可能。
対象となる実行ファイルなどによってプロファイルがあった形での起動が可能となった。例えばスタートから起動されるコマンドプロンプトと PowerShell で開かれるプロファイルがそれぞれ異なるといったケースに対応できる。
前回のウィンドウ状態(ペインとタブ)を復元する機能が追加、ウィンドウのターミナル部分の完全な透過の対応や細かい改善や修正など。
New product: Raspberry Pi Zero 2 W on sale now at $15 - Raspberry Pi
https://www.raspberrypi.com/news/new-raspberry-pi-zero-2-w-2/
Raspberry Pi Zero 2 W が発表された。
Raspberry Pi Zero と同じフォームファクターで SoC が Raspberry Pi 3 と同じ BCM2710A1 (Cortex-A53 コア, ARMv8 アーキテクチャー) にアップグレード。スイッチサイエンスでの発売は工事設計認証を取得次第とのこと。
- Raspberry Pi財団が2021年10月28日に新製品「Raspberry Pi Zero 2 W」を発表、スイッチサイエンスウェブショップでも近く発売予定
- Raspberry Pi Zero 2 W【発売予定】 - スイッチサイエンス
- Raspberry Pi Zero 2 Wを見て触ってレポート
アーティクル、スライドなど
WebAssembry上で動くSilverlight、OpenSilverで何が出来るのか - Qiita
https://qiita.com/karuakun/items/b1c6a1b08a62b9e8d588
WebAssembly で動作する Silverlight 互換実装の OpenSilver のインストールや簡単な使用感についての記事。
Proxy any class by interface in C# with DispatchProxy
https://dev.to/nullabletype/proxy-any-class-by-interface-in-c-with-dispatchproxy-2i6a
System.Reflection.DispatchProxy
の簡単な使い方の解説記事。
DispatchProxy
クラスを継承することでインターフェースのメソッド実行に対するプロキシーを簡単に実装することができる。記事ではその際のパフォーマンスへの影響などについても触れている。
Exploring C# 10: Global Using Declarations
https://dev.to/daveabrock/exploring-c-10-global-using-declarations-lab
C# 10 で導入される Global Usings についての記事。
通常の C# ソースコードに記述する global using
のほか static
やエイリアスの指定、.csproj の <ItemGroup>
を使用した定義についてなど。
Analyzers for ASP.NET Core in .NET 6: Exploring .NET Core 6 - Part 7
https://andrewlock.net/exploring-dotnet-6-part-7-analyzers-for-minimal-apis/
C#: 匿名型とValueTupleではシリアライズ結果が違う
https://zenn.dev/shimat/articles/c5248dda90270e
匿名型と名前付き ValueTuple を各種シリアライザー (MessagePack, JSON.NET, System.Text.Json) に通した際の結果の違いについての記事。
名前付き ValueTuple の名前は属性で付加されるだけの要素のため、大抵の場合出力にはキーとして含まれない。
NUnit vs. XUnit vs. MSTest: Comparing Unit Testing Frameworks In C#
https://www.lambdatest.com/blog/nunit-vs-xunit-vs-mstest/
NUnit と xUnit と MSTest の違いをまとめた記事。それぞれの属性が何に対応するかといったことなどもまとまっている。
C#で小さい複素数の積を大量に計算したかったのでSIMD実装とか試してみた - Qiita
https://qiita.com/amutou/items/9031667f21f77a95df1e
SDR (ソフトウェア無線) のデータ処理のために SIMD を使用してみたという記事。
File-Scoped Namespaces – A Look at New Language Features in C# 10 | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2021/10/28/file-scoped-namespaces-in-csharp-10/
C# 10 で導入されるファイルスコープ名前空間について、ReSharper と Rider の対応も含めて解説している記事。
ReSharper と Rider では Code Styles として設定しチームで共有可能で、変換も Quick Fix から可能となる。テンプレートに関してもコードスタイルに合わせて自動的に変換するといったことも。
Encrypt/decrypt data with .NET 6 and Azure Key Vault
https://dev.to/425show/encryptdecrypt-data-with-net-6-and-azure-key-vault-oak
Azure Key Vault を使用してデータを暗号化、復号処理を行う方法についての記事。
Improving your ASP.NET Core site's file handling capabilities – part 1 – Introduction - imar.spaanjaars.com
ASP.NET Core で Web アプリケーションのファイルデータを扱う手段として File
クラスなどを直接使用するのではなくファイルアクセスを抽象化した IFileProvider
インターフェースを使用する方法についての記事。
Azure Storage Blob を使用した IFileProvider
の実装についても触れている。
Bite-Size .NET 6 - PriorityQueue<T, N>
https://exceptionnotfound.net/bite-size-dotnet-6-priorityqueue/
.NET 6 で導入される PriorityQueue<TElement, TPriority>
クラスについての解説記事。
Testing gRPC with gRPCui Docker and Swagger
https://medium.com/@niteshsinghal85/testing-grpc-with-grpcui-docker-and-swagger-9cfc9531512
ASP.NET Core gRPC アプリケーションのデバッグやテストを行うために gRPC UI を Docker で使用する方法についての記事。
- fullstorydev/grpcui: An interactive web UI for gRPC, along the lines of postman
- Create JSON Web APIs from gRPC | Microsoft Docs
5x Lessons Learned from Migrating a Large Legacy to .NET 5/6 - NDepend
https://blog.ndepend.com/5x-lessons-learned-from-migrating-a-large-legacy-to-net-5-6
大きい .NET Framework プロジェクト (NDepend) を .NET 5/6 に移行する際の5つの学びについての記事。
NDepend の UI に依存しないコードを .NET Framework から .NET 5 へと移行したことで解析やレポーティング、といったツールが macOS や Linux で動作できるようになった。その中で得られた教訓を紹介している。
.NET Framework との共存には .NET Standard を選択すること、API の非互換といったペインポイント、ツールを使用して移行の助けをすること、コードの保守性を担保すること、3rd パーティーのライブラリはモジュール化され軽量でオープンソースであるべきといったことをあげている。
GitHub ActionsでXamarin AndroidをReleaseビルド (ストア提出用) - Qiita
https://qiita.com/kurema/items/becaf36dda27351e88cc
GitHub Actions で Xamarin Android のアプリケーションを Release ビルドし、ストア提出可能なパッケージを作る方法についての記事。
最適化の最前線から:Unity 2020 LTS でのマネージコードストリッピングの強化 | Unity Blog
Unity でのアプリケーションビルドで使用されるマネージドコードのストリッピングを行う Unity リンカーについての記事。
Unity リンカーによって何が行われるのか、Unity 2020 LTS 以降で導入されたストリッピングの挙動をカスタマイズする属性などについて説明している。
ライブラリ、リポジトリ、ツールなど
AArnott/Xunit.Combinatorial: Adds combinatorial and pairwise testing capability to Xunit tests
https://github.com/AArnott/Xunit.Combinatorial
xUnit のテストのパラメータ値に組み合わせを渡せるようにする拡張ライブラリ。
例えば下記のような bool
を引数にとるテストであれば自動で true
/ false
の組み合わせを渡してテストできる。
[Theory, CombinatorialData]
public void CheckFileSystem(bool recursive) { /* ... */ }
他にも複数指定した組み合わせをテストできる。
[Theory, CombinatorialData]
public void CheckValidAge(
[CombinatorialValues(5, 18, 21, 25)] int age,
bool friendlyOfficer)
{
// This will run with all combinations:
// 5 true
// 18 true
// 21 true
// 25 true
// 5 false
// 18 false
// 21 false
// 25 false
}
サイト、ドキュメントなど
プリミティブ: .NET 用拡張機能ライブラリ
https://docs.microsoft.com/ja-jp/dotnet/core/extensions/primitives
Microsoft.Extensions.Primitives
についての説明ドキュメント。
CancellationToken
を使用して変更通知を受け取れる CancellationChangeToken
や StringSegment
, StringTokenizer
, StringValues
といった文字列を扱うクラスなどについて触れている。
Your code displays Japanese wrong
https://heistak.github.io/your-code-displays-japanese-wrong/
アプリケーションで日本語を表示したとき、期待されるグリフとは別なものが表示されるいわゆる中華フォント状態となってしまう場合にどうしてそうなるのか、どうすれば解決するのかを非 CJK の開発者に伝えるためのドキュメント。
ツイート
In case anyone else was wondering this: an empty finally clause is not removed when all conditional contents are removed. It has no practical impact either, though. pic.twitter.com/EgSwGVPNDA
— Nick Craver (@Nick_Craver) October 27, 2021
finally
句の中が Conditional
ですべてなくなったとしてもコンパイル結果には finally
自体は残っているという話。
Did you know that .NET 6 contains now ISpanFormattable interface, implemented by many built in types, to TryFormat value into Span? 😍 pic.twitter.com/hoS7sbsIZ2
— Konrad Kokosa (@konradkokosa) October 28, 2021
.NET 6 から ISpanFormattable
が使えるようになったので TryFormat
で Span<Char>
に書き込めるものが増えたという話。
いつの間にかBurstが(エントリポイントの引数には使えない制限付きだけど)Span対応していた https://t.co/PspKs1Xspl
— Haruto Otake (@Trapezoid) October 28, 2021
Unity の Burst コンパイラーの 1.6.1 から Span<T>
/ ReadOnlySpan<T>
が関数ポインターや Job の中のみという制限があるもののサポートされた話。
https://t.co/gjHpiGEvsr
— ++C++; // 管理人: 岩永 (@ufcpp) October 26, 2021
UnityでのNuGetパッケージでの「dllのバージョン違うから読めない」問題、一応bindingRedirectできるらしいという話をやっと見つけたけどこのページのページランク低すぎて見つけるの苦労した…
Unity で csc.rsp に -appconfig:app.config
の形で設定を記述することで bindingRedirect できるというテクニック。
Deep Dive
API Implementation: Add Indexer to Vectors by deeprobin · Pull Request #60517 · dotnet/runtime
https://github.com/dotnet/runtime/pull/60517
Vector 系の構造体にインデックスアクセスを可能にする PR。.NET 7 に含まれる予定。
[SUPER DRAFT] New API for invoking JS functions from C# by kg · Pull Request #60765 · dotnet/runtime
https://github.com/dotnet/runtime/pull/60765
WebAssembly 向けに icall を実装することで C# から JavaScript の関数を呼び出したりするオーバーヘッドを小さくするという PR。
Add ObjectDisposedException.Throw for object instance and type by Bibletoon · Pull Request #58684 · dotnet/runtime
https://github.com/dotnet/runtime/pull/58684
ObjectDisposedException
を簡単にスローするためのヘルパーメソッド ThrowIf
の追加 PR。.NET 7 に含まれる予定。
Resolve differences between string.IndexOfAny and MemoryExtensions.IndexOfAny · Issue #60864 · dotnet/runtime
https://github.com/dotnet/runtime/issues/60864
string.IndexOfAny
は anyOf
引数の値が5つ以下の時は MemoryExtensions.IndexOfAny
をそのまま呼び出し、6つ以上の時は Probabilistic Map を使用しているが、挙動をそろえてそのまま MemoryExtensions
に 移譲するのでいいのではないかという Issue。
Improve vectorization of MemoryExtensions.IndexOf(..., span) · Issue #60866 · dotnet/runtime
https://github.com/dotnet/runtime/issues/60866
MemoryExtensions.IndexOf
はベクトル化できる余地があるのではないかという Issue。
Utf8 string literal proposal by jaredpar · Pull Request #5349 · dotnet/csharplang
https://github.com/dotnet/csharplang/pull/5349
UTF-8 文字列リテラルの初期プロポーザルのPR。