はなちるのマイノート

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

C#

【C#】YamlDotNetを利用して簡単にyamlからjsonへ変換をする

C#

はじめに 今回はYamlDotNetを利用して.yamlから.jsonへの変換をC#でやる方法を紹介したいと思います。 はじめに 概要 やり方 YamlDotNetをインポートする コードを記述する 参考 概要 YamlDotNetを用いれば複数のライブラリを活用したりせずに簡単に変換がで…

【C#】ASP.NET CoreのMinimalAPIでOpenAPIドキュメントを自動生成してSwaggerUIやReDocで可視化する(NSwag.AspNetCore)

C#

はじめに 今回はASP.NET CoreのMinimal APIで自動でOpenAPIドキュメントを生成してSwaggerUIやReDocで可視化する方法を紹介したいと思います。learn.microsoft.comちなみにMicrosoft公式が出しているMicrosoft.AspNetCore.OpenApiというOpenAPIドキュメント…

【C#】C#10で導入されたMSBuildのプロパティであるImplicitUsingsを用いてglobal usingを暗黙的に定義する方法

C#

はじめに 今回はC#10で導入されたMSBuildのプロパティであるImplicitUsingsについて紹介したいと思います。learn.microsoft.com はじめに 概要 dotnet new consoleを試した様子 プロジェクト SDK の種類とglobal usingの定義 定義されるglobal usingを編集す…

【C#】SourceGenerator(RoslynAnalyzer)で独自警告やエラーを作成した際にでる「RS2008: 規則を含むアナライザープロジェクトのアナライザーリリース追跡を有効にしてください」の対応方法

C#

はじめに SourceGeneratorで独自警告を実装していた際に、以下のような警告をRiderが表示してきました。 RS2008: 規則を含むアナライザープロジェクトのアナライザーリリース追跡を有効にしてください 警告が出ている様子この対処法について調べたので書き残…

【C#】Rider2025.1 EAP5でSyntax TreeのVisualizerが来た!

C#

はじめに Rider 2025.1 EAP5のリリース情報が更新されました。 blog.jetbrains.com今までRiderがSyntax TreeのVisualizerに非対応だったので、いつもISGやRoslynAnalyzerを触るときはSharpLabを多用していました。Riderが対応してくれるだけでかなり期待大で…

【C#】.NET v9.0.100-rcでdotnet tool restoreをしたら「Package xxxxx is not a .NET tool.」というエラーが出てきてしまう話

C#

はじめに dotnet tool restoreをしようとしたところ、以下のようなエラーが出てきてしまいました。 $ dotnet tool restore Package xxxxx is not a .NET tool. nuget.configも.config/dotnet-tools.jsonも正しく設定されており、今までできていたのですが凄…

【C#】GCPのVertex AI APIにアクセスするためのクライアントライブラリを活用して簡単にChatを実現する方法

C#

はじめに 今回は.NET用のSDKを用いてGCPのVertex AI APIでChatをする方法を紹介したいと思います。 コンソールからVertex AIを利用して対話している様子 はじめに 前提 インストール方法 AIと対話する さいごに 前提 Google Cloudプロジェクトが既に作成済で…

【C#】EmbeddedResourceはファイル名にドット(.)が二個あると動作しない問題とその対処法

C#

はじめに リソースをアセンブリに組み込むことができるEmbeddedResourceですが、テストで利用するファイルなんかを組み込んだり等々とても有用な機能です。ただ最近EmbeddedResourceで組み込みたいファイル名にドット(.)が二個あると正しく動作しないという…

【Rider】どうやらNRT(null 許容参照型)が有効だとJetBrains.Annotationの[ContractAnnotation]や[AssertionMethod]が動いてないらしい

はじめに 以下のようなコードがあったとします。 public static void Main() { string? value = new Random().Next() > 10 ? "" : null; Assert(value != null); // Riderが検知できないので警告などは出てこない if (value == null) { // ここを通ることは…

【Docker, C#】Docker buildで「--platform linux/amd64」を指定した際にdotnet restoreでスタックしてしまう対策

はじめに Cloud RunにDocker Imageをアップロードしようとしたところ、M1 Macでビルドする際には以下のオプションを利用しないとダメなことに気が付きました。 $ docker build ./ -t hoge --platform linux/amd64 ただし以下のDockerfileだとdotnet restore…

【C#】「Unhandled exception. System.IO.FileNotFoundException: Error loading native library. Not found in any of the possible locations: .../libgrpc_csharp_ext.arm64.dylib」というエラーの対処法

C#

はじめに M2 MacでGrpc.Coreを利用を利用しようとしたところ以下のエラーが出てきてしまいました。 www.nuget.org Unhandled exception. System.IO.FileNotFoundException: Error loading native library. Not found in any of the possible locations: .../…

【Unity2024 Advent Calendar】Unityのコードメトリクスを可視化するための分析基盤の作り方(CodeCoveragePackage + coverlet.collector + octocov + BigQuery + Looker Studio)

はじめに こちらはUnity2024 Advent Calendarの12/20記事になります。是非他の方の記事もチェックしてみてください。 qiita.com今回はUnityでのコードメトリクスを可視化するための分析基盤の作り方について紹介したいと思います。 PRのコメントでコードメト…

【C#】C#12から追加されたコレクション式を自身が定義した型も対応できるようにする方法

C#

はじめに C#12(.NET8)からコレクション式というものが導入されました。 int[] array = [1, 2, 3]; List<int> list = [1, 2, 3]; Span<int> span = [1, 2, 3]; ReadOnlySpan<int> ros = [1, 2, 3]; ImmutableArray<int> immutable = [1, 2, 3]; [1, 2,3]のようにして配列などのコ</int></int></int></int>…

【C#】MSBuildで環境変数によってDefineConstantsを用いてコードを切り替える方法

C#

はじめに 今回はMSBuildで環境変数によってDefineConstantsを用いてコードを切り替える方法を紹介したいと思います。 はじめに 概要 やり方 実験 概要 環境変数によってC#コードを変更したいこともあるかなと思います。 // 環境変数「HOGE_VERSION」が「1.0.…

【C#】.protoに記載されているコメントをランタイムで取得する方法(--descriptor_set_outを用いてFileDescriptorSetを活用する)

C#

はじめに 今回は.protoに記載されているコメントをランタイムで取得する方法を紹介したいと思います。 // example.proto syntax = "proto3"; import "google/protobuf/descriptor.proto"; option csharp_namespace = "Protobuf.Sample"; // メッセージ定義に…

【C#】どうやらMicrosoft.Extensons.LoggingはMessageTemplateのIndexによる順序の制御に対応していないらしい

C#

はじめに Microsoft.Extensions.LoggingはMessageTempalteを用いています。 messagetemplates.org // MessageTempalteを用いたログ出力 string p1 = "param1"; string p2 = "param2"; // Parameter values: param1, param2 logger.LogInformation("Parameter…

【C#】coverlet.collectorで生成されたファイルなどの特定ファイルをコードカバレッジ収集対象外にする

C#

はじめに 今回はcoverlet.collectorで生成ファイルなどの特定のファイルをコードカバレッジ収集対象外にする方法を紹介したいと思います。 はじめに やり方 コマンド引数を用いる runsettingsを用いる 参考 やり方 以下の2種類の方法があります。 コマンド引…

【C#】recordの一部プロパティだけで等価かどうかを判定するように変更(Equals・GetHashCode置き換え)する方法

C#

はじめに recordはとても便利な糖衣構文ですが、例えば一部のプロパティだけで等価かどうか判定したいような場合がありました。例えばDDDのEntityとかですね。実際にrecordがどういう実装がされているのかは以下の記事を見ると分かると思います。 www.hanach…

【Rider】「実行 / デバッグ構成(Run/Debug Configurations)」を用いて引数を与えながらデバッグ実行をする

はじめに Riderのデバッガーはとても有用ですが、恥ずかしながら引数を渡しながらデバッグ実行する方法を最近まで知りませんでした。 デバッガーを利用している様子そのやり方を今回は紹介したいと思います。 はじめに やり方 実行構成の編集 他の人と共有で…

【C#】NuGetでGoogle.Protobuf.Toolsをインストールした際のprotoc実行バイナリのパスについて

C#

はじめに protobufを利用する際に、protocを取得する手段の一つとしてGoogle.Protobuf.Toolsを利用するのは割とある方法だと思います。www.nuget.orgしかし毎回その実行バイナリのパスを忘れてしまうのでメモがてらに書き残しておきたいと思います。 はじめ…

【C#】C#13から登場した「OverloadResolutionPriority」を用いてオーバーロードの優先順位を指定する

C#

はじめに C#13で新しくSystem.Runtime.CompilerServices.OverloadResolutionPriorityAttributeが追加されました。 namespace System.Runtime.CompilerServices; [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets…

【Blazor+GCP+terraform】Blazor ServerをCloud Runで動作させてGCSマウントしたファイル一覧を表示する

はじめに 今回はBlazor ServerをCloud Run上で動作させてマウントさせたGCS上のファイルを一覧で表示する簡易サイトの作り方を紹介したいと思います。 実際に動作している様子 はじめに 概要 作り方 .NET 8 Blazor web applicationを作成する GCSのマウント…

【C#】マークダウンとC#で数行コードを書くだけで静的サイトが作れる「Statiq Web」を紹介

はじめに .NETの最新情報を毎週投稿してくれるWeekRef.NET: 週刊 .NETですが、どうやらStatiq Web + GitHub Pagesを用いて構築されていることを知りました。 weekref.net気になり調べたところ、C#コードを数行書くだけで、記事を.mdで書くといい感じにサイト…

【C#】ExcludeFromCodeCoverageAttributeを用いてコードカバレッジ収集の対象外にする

C#

はじめに 今回はdotnet testでコードカバレッジを収集する際にExcludeFromCodeCoverageAttributeを用いて対象外にする設定をする方法を紹介したいと思います。 learn.microsoft.com はじめに コードカバレッジ収集について コードカバレッジの収集対象外に設…

【GCP + terraform】terraformを使用してCloud RunでGCSをMountして利用する(C#)

はじめに 今回Cloud RunにてCloud Storageのバケットをterraformを使用してマウントする方法を紹介したいと思います。 はじめに 概要 GCSの構築 IAM・サービスアカウントの設定 Cloud Runの定義 GCS上のファイルを表示するC#コード 実際に動作している様子 …

【C#】CoconaでMicrosoft.Extensions.DependencyInjectionを用いてDIを行う方法

C#

はじめに 今回はCoconaに標準で入っているMicrosoft.Extensions.DependencyInjectionを用いてDIを行う手法を紹介したいと思います。github.comhttps://github.com/mayuki/Cocona/blob/master/samples/InAction.DependencyInjection/Program.cs はじめに やり…

【Unity】生成したコードをPrefabに自動でアタッチする方法

はじめに 今回は生成したコードをPrefabに自動アタッチする方法を紹介したいと思います。 はじめに 概要 コンパイル後にアタッチする 実験 概要 PrefabへのアタッチにはPrefabUtilityを利用すると簡単に実現できます。 docs.unity3d.com private static void…

【C#, Actions】coverlet.collector + octcovを用いてプルリクを出した際にコードカバレッジの増減をCIで表示する

はじめに 今回はC#でプロジェクトを構築している前提でPRを出した際にコードカバレッジの増減を表示してくれるCIの作り方を紹介したいと思います。 コードカバレッジの増減表示具体的にはcoverlet.collectorとoctcovというOSSを利用して実現していきます。gi…

【Unity】YetAnotherHttpHandlerを用いてHTTP/2を扱えるHttpClientを作成する

はじめに 今回はYetAnotherHttpHandlerを用いてUnityでHTTP/2を扱う方法を紹介したいと思います。 はじめに 背景 概要 環境 インストール方法 使い方 さいごに 背景 まず.NETが提供するHttpClientですが、.NET Core3.0以降であればHTTP/2に対応しています。 …

【C#】record (class)・record struct・readonly record structがどういう実装になるのかSharpLabでデコンパイルして覗いてみる

C#

はじめに record (class)やrecord struct、readonly record structはとても便利な機能なのですが、たまにEqualの処理どうなってたっけ・プロパティのアクセシビリティなんだっけと私はよくなります。 // record : record classと同じ意味 public record Reco…