はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

C#

新着順 人気順

【C#】Coconaを利用してSystem.CommandLineなどを利用せずに簡単にConsoleアプリケーションを作成する

C#

はじめに 今回はCoconaというOSSを紹介したいと思います。github.com はじめに 概要 インストール 使い方 基本 Optionsについて Argumentsについて Sub-commands パラメーターの共通化 Validation Microsoft.Extensions.*の利用 Logging DI さいごに 概要 よ…

【Unity】Player SettingsのScriptingDefineSymbolsをスクリプトから取得・設定する方法

はじめに 今回はPlayerSettingsのScriptingDefineSymbolsをスクリプトから取得・設定する方法について紹介をしたいと思います。 ProjectSettings/Player/OtherSettings/Script Compilationより設定可一応補足ではありますが、スクリプトからでなければProjec…

【C#】Dockerとminimal API(ASP.NET Core + .NET 8)を利用して最小構成のウェブサーバーを構築する

はじめに 今回はDockerとminimal API(ASP.NET Core + .NET 8)を利用して最小構成のウェブサーバーを構築してみたいと思います。 はじめに プロジェクトを用意する Dockerfileを定義する イメージをビルド コンテナを起動 参考 プロジェクトを用意する まずは…

【C#】minimal API(ASP.NET Core + .NET 8)で構築した最小構成のウェブサーバーをCloud Runで動作させる

はじめに 今回はminimal API(ASP.NET Core + .NET 8)で構築した最小構成のウェブサーバーをCloud Runで動作させる方法を書いていきます。 はじめに プロジェクトを作成する Dockerfileについて Cloud Runにデプロイする Artifact Registry 参照 プロジェクト…

【Unity】UnityでCallerArgumentExpression属性, required修飾子, initアクセサを利用する方法(自分で定義する必要があり)

はじめに 現在のUnityで利用できるC#のバージョンはC#9までになってます。ただ少し裏技?を使うことで実質C#11まで利用することが可能になっています。zenn.devただ注意点としてはasmdefが絡んでくるとよく知られているCsprojModifierを用いる手法だけだとい…

【C#】インターンプールを用いてstring生成によるヒープのメモリ確保を防ぐ方法(メモリを占有しつづけるのでそこは注意)

C#

はじめに 今回はなるべくstringでヒープへのメモリ確保を抑えるためにインターンプールを利用する方法について紹介したいと思います。 はじめに 概要 string.Internとstring.IsInterned 明示的に登録しなくても登録される場合 注意点 参考 概要 通常stringは…

【C#】.NET 6で追加されたstring.Create(internalであるstring.FastAllocateStringを利用できるメソッド)を用いて高速にstringを生成する

C#

はじめに 今回はstring.Createを用いて高速にstringを生成する方法を紹介したいと思います。learn.microsoft.com はじめに 概要 使い方 ちなみに 実験 追記 注意点 参考 概要 string.FastAllocateStringというinternalなメソッドが.NETにはあり、これを利用…

【C#】GitHub Actionsで.NETのビルド&テストを行う方法(スターターワークフローがあるので簡単)

はじめに 今回はGitHub Actionsで.NETのビルド&テストを実行する方法を紹介したいと思います。 はじめに やり方 実験 ファイルを用意 ローカルで動作確認する GitHub Actionsが動作するか確認する ワークフローの中身 参考 やり方 .NETのビルド&テストをする…

【C#】FastEnumというライブラリを用いて列挙型関連のメソッドを爆速+ゼロアロケーションで実行させる(Static Type Cachingによる高速化)

C#

はじめに 今回は列挙型関連のメソッドを爆速+ゼロアロケーションで実行できるFastEnumというライブラリを紹介したいと思います。 .NETメソッドとの比較結果 はじめに 概要 インストール方法 使い方 列挙型のName・Value・FieldInfoなどを一度に取得したい場…

【C#】dotnet newコマンドでプロジェクトを作成できるようなテンプレートを作成する方法

C#

はじめに 今回はdotnet new 〇〇コマンドでプロジェクトを作成できるようなテンプレートの作成方法を紹介したいと思います。 $ dotnet new stringext テンプレート "Example templates: string extensions" が正常に作成されました。 テンプレートからプロジ…

【C#】C#10(.NET6)から登場したCallerArgumentExpressionを用いてメソッドのパラメーター名を取得する

C#

はじめに 今回はCallerArgumentExpressionを用いてメソッドのパラメーター名を取得する方法を紹介したいと思います。 learn.microsoft.com はじめに 概要 使い方 おまけ 概要 CallerArgumentExpressionを用いることで、メソッドの引数で渡した真の意味での文…

【C#】TypeがKeyなDictionaryをStatic Type Cachingに置き換えて処理の高速化させる(実験付き)

C#

はじめに 今回はTypeをKeyにとるDictionaryをStatic Type Cachingに変えて処理を高速化させる方法について紹介したいと思います。Static Type Cachingについては以下のスライドのp46~触れられています。 www.slideshare.net はじめに 概要 バイナリサイズを…

【GCP, C#】Google Cloud Functions(.NET) + Cloud Scheduler + Cloud Pub/Subを用いてSlack通知ツールを作る

はじめに 今回はGoogle Cloud Functions(.NET) + Cloud Scheduler + Cloud Pub/Subを用いて定期的にSlackにメッセージを投稿するシステムを作ってみようと思います。 実際に動作させている様子 はじめに 概要 Slackでの操作 Slackアプリを作成する GCPでの操…

【C#】噂のMD5が同じになる72文字で1文字しか変わらない文字列が本当か試してみる

C#

はじめに Xを見ていたら以下のような投稿を見かけました。Here is a 72-byte alphanum MD5 collision with 1-byte difference for fun: md5("TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")=md5("TEXTCOLLBYfGiJUETHQ4hEcKSMd…

【C#】BenchmarkDotNetを用いて処理速度・メモリ確保量を計測する

C#

はじめに 今回はBenchmarkDotNetというライブラリを利用して処理速度・メモリ使用量を計測する方法を紹介したいと思います。github.com はじめに 概要 インストール 使い方 1. classを用意 2. Benchmark属性をつけたメソッド定義 3. BenchmarkRunner.Runを行…

【C#】.NETでGoogle Cloud Functionsを作成してデプロイをする方法メモ

はじめに 今回はGoogle Cloud Functionsに.NETを利用した関数をデプロイする方法について書きたいと思います。内容的には以下の公式ドキュメントをミックスした感じです。 cloud.google.com cloud.google.com codelabs.developers.google.com先に書いておく…

【C#】StringBuilderとDefaultInterpolatedStringHandlerの処理速度・メモリ確保量を比べてみる

C#

はじめに 今回はStringBuilderとDefaultInterpolatedStringHandlerの処理速度・メモリ確保量を比べてみたいと思います。learn.microsoft.comlearn.microsoft.com大抵のStringBuilderの利用シーン、new StringBuilderの代わりにnew DefaultInterpolatedString…

【C#】ThreadStaticを利用してスレッドによって異なるインスタンスが生成される静的フィールドを作成する

C#

はじめに 今回はThreadStaticを利用してスレッドによって異なるインスタンスが生成される静的フィールドを作成する方法を紹介したいと思います。learn.microsoft.com はじめに やり方 初期値をつけてはダメ staticでないフィールドはダメ やり方 [ThreadStat…

【C#】string.FormatとDefaultInterpolatedStringHandlerで処理速度・GC.Allocの差を計測してみる(string.Formatはボックス化の可能性あり)

C#

はじめに 今回はstring.FormatとDefaultInterpolatedStringHandlerで処理速度・Allocationの優劣を調べてみようと思います。learn.microsoft.comlearn.microsoft.com結論から言うとDefaultInterpolatedStringHandlerが優秀です。(C#10から補完文字列(interpo…

【C#】.NET CLIの"dotnet tool restore"と".config/dotnet-tools.json"でローカルで使用するツールのバージョンを固定する(t4のバージョンをプロジェクトごとに固定したり)

C#

はじめに 今回はdotnet tool restoreとdotnet-tools.jsonを用いて"現在のディレクトリとサブディレクトリ"で使用するツールのバージョンを固定する方法を紹介したいと思います。↓ マニフェストファイル(.config/dotnet-tools.json)のサンプル { "version": 1…

【C#】System.Text.JsonのJsonNodeを用いてスキーマレスなJsonにプロパティを追加する方法

C#

はじめに 今回はSystem.Text.JsonでスキーマレスなJsonに対してプロパティを追加する方法を紹介したいと思います。learn.microsoft.com はじめに やり方 参考 やり方 JsonDocumentは読み取り専用なので、JsonDocumentではなくJsonNodeを用いることで容易に実…

【Blazor】BlazorでASP.NET Coreを使用した最初のWebアプリをビルドする公式ドキュメントを読んだメモ①

はじめに ふと興味本位でBlazorを触ってみようと思い、以下の公式のラーニングパスをやってみてます。 learn.microsoft.comそのときに学んだことをメモがてらに残しておきたいと思います。正直自分宛のメモなので、気になる方は公式のものをみてください。 …

【Unity】Unity公式パッケージ「Code Coverage」を利用してTest Frameworkのコードカバレッジを計測する

はじめに 今回はUnity公式パッケージであるCode Coverageを利用してTest Frameworkで実行したテストのコードカバレッジを計測する方法を紹介したいと思います。docs.unity3d.com 実際に生成したレポート はじめに Code Coverageとは 概要 環境 インストール…

【C#】MS製のLoggingライブラリである「Microsoft.Extensions.Logging」の基礎的な使い方

C#

はじめに 前回messagetemplates-csharpというMessageTemplateを扱えるようにするライブラリを紹介しました。www.hanachiru-blog.com今回はMS製のMicrosoft.Extensions.LoggingというLoggingライブラリについて紹介したいと思います。(Microsoft.Extensions.L…

【C#】「messagetemplates-csharp」を用いてC#でMessageTemplateを扱う

C#

はじめに 今回はmessagetemplates-csharpというC#用のMessageTemplateライブラリを紹介したいと思います。github.com はじめに 概要 MessageTemplateとは より詳細の設定 messagetemplates-csharp 概要 インストール方法 利用方法 詳細な仕様 さいごに 概要 …

【C#】C#7より追加された型によるswitch と C#8より追加された複数の値をまとめてswitchする 機能について

C#

はじめに 今回はC#7より追加された型によるswitch と C#8より追加された複数の値をまとめのswitchについて取り上げたいと思います。 はじめに 概要 型スイッチ 複数の値をまとめてswitchする 概要 型スイッチ C#7より型によるswitchができるようになりました…

【C#】Dictionary.Addとインデクサーによる要素の追加で挙動がどう異なるか(重複するキーの場合にArgumentExceptionか上書き)

C#

はじめに Dictionaryに要素を加える際に、Dictionary.Addとインデクサーによる要素追加で少し挙動が異なります。 Dictionary<string, int> dictionary = new Dictionary<string, int>(); // Dictionary<TKey,TValue>.Add(TKey, TValue) // 既存のキーを指定した場合にはエラー(System.ArgumentExcept</tkey,tvalue></string,></string,>…

【Unity】Unity Test Frameworkで特定の例外がスローされることをAssertする方法(Assert.Throws, Assert.Catch, Throws.TypeOf, Throws.InstanceOf)

はじめに 今回はUnity Test Frameworkでエラーのテストをする方法について紹介したいと思います。docs.nunit.org はじめに Assert.Throws Assert.Catch Assert.Thatを利用する 小ネタ Assert.Throws Assert.Throwsを利用することで特定の例外がスローされる…

【Unity】System.Text.Json v8.0.1をUnityで動かすまでの手順

はじめに 今回はSystem.Text.Jsonのv8.0.1をUnityで動作させる手順について紹介したいと思います。またSystem.Text.JsonをUnityの型に対応させる記事を前に書いたので、気になる方はそちらもチェックしてみてください。 engineering.dena.com はじめに その…

【Unity】Unityが利用しているMicrosoft.CodeAnalysis.CSharpのバージョンの確認方法(Mac)

はじめに 今回はUnityが利用しているMicrosoft.CodeAnalysis.CSharpのバージョンの確認方法を紹介したいと思います。Roslyn AnalyzerやSource Generatorを利用する場合はMicrosoft.CodeAnalysis.CSharpのバージョンによって利用できるバージョンが異なるため…