C#
実行環境 .NET 8 Visual Studio 17.8.3 xUnit 2.4.2 準備 ASP .NET Core WebAPIのプロジェクトとユニットテストのプロジェクトを作成し、ユニットテストのプロジェクトからWebAPIのプロジェクトを参照するように設定しておきます。 また、Program.csはトップ…
ASP.NET Coreでリクエストパラメータにrecordを使った場合に出力されるswagger.jsonにRequired等の属性が反映されない問題があったのでまとめました。 問題になっているのはだいたい次のIssueと同じ内容です。 github.com 最近はエンドポイントのリクエスト…
実行環境 VS2022 17.8.3 .NET 8 httpファイルを用意する 適当なhttpファイルを用意します。HostAddressとParameterは後述の別ファイルで定義します。 GET {{HostAddress}}?q={{Parameter}} httpenv.jsonを用意する httpenv.jsonを作成してhttpファイルと同じ…
.NET 8からDateTimeに依存した処理のテストに役立つTimeProviderとFakeTimeProviderという仕組みが追加されたので試していきます。 実行環境 VS2022 17.8.1 .NET 8 準備 NuGetパッケージをインストールします。これでFakeTimeProviderが使えるようになります…
C#でASP.NET Coreを使ったWeb開発をメインでやっている私がコードを書くためにサブスクライブしているものをあげていきます。 ReSharper 言わずと知れたVisual Studioの拡張機能です。本家よりも強力なIntelliSence、括弧の自動補完などなどいろんな機能に助…
CI/CDでswagger.jsonを出力したかったのでやってみました。 実行環境 VS2022 17.7.4 .NET 7 Swashbuckle.AspNetCore.Cli 6.5.0 Swashbuckle.AspNetCore.Cliをインストールする プロジェクトのルートで.NET ツールをインストールします。 dotnet new tool-man…
EFCoreのTimestampを使って楽観的排他制御をやってみます。 実行環境 VS2022 17.6.5 EFCore 7.0.10 SQL Server 2022 Entityを用意する 次のようなEntityを用意しました。 public record Todo { public int Id { get; set; } public string? Content { get; s…
EFCoreのChangeTrackerについて今まで雰囲気で分かった気になっていたので、理解を深めるためにDbContextのデータをいろいろ操作しながらChangeTrackerの内容を確認してみます。 実行環境 VSCode + C# Dev Kit .NET 7 Microsoft.EntityFrameworkCore.InMemor…
Azureでメールが送れるサービスが使えるようになったとのことで試してみました。 Azureでリソースを作成する Azure Portalから以下3つのリソースを作成します。 Communication Services Email Communication Services ドメイン Communication Servicesの作成…
ChatGPTが非常に流行っているので試してみることにしました。 ここではC#のコンソールアプリケーションでChatGPTと会話ができるように実装し、その過程と結果を紹介します。 実行環境 Visual Studio 2022 17.5.3 .NET 7 OpenAIのAPIはこちらのライブラリを使…
久しぶりにEFCoreを触ってみたら 一括更新・一括削除( ExecuteUpdate / ExecuteDelete ) という良さげな機能が追加されていたので試してみました。 今までは一度SELECTした後にUPDATEなりDELETEしていたのがSELECTしなくても良くなりました。 実行環境 Visua…
Visual Studio 2022のバージョン17.5から、VSCodeの拡張機能REST Clientと同じようなHTTPリクエストを実行できる機能が追加されたそうなので試してみました。 marketplace.visualstudio.com 実行環境 Visual Studio 2022 17.5 WebAPIを準備する MinimalAPIで…
ASP.NET Core 7から使えるようになったIParsableを使ってモデルバインドをしてみます。 やること コントローラのアクションで、"2022/12/31,2023/01/01"のような文字列をDateRangeという日付の区間を表すクラスにバインドして受け取れるようにしてみます。 /…
xUnit.netのTheoryDataを使ってテストコードを書いてみます。 実行環境 Visual Studio 2022 17.2.0 .NET 6 xUnit 2.4.1 このような名前と年齢を結合した文字列を返すメソッドのテストコードを書いてみます。 public string GetFullNameWithAge(string lastNa…
.NET7のRC版がリリースされてC#11を試せるようになったみたいなので新しく使えるようになったrequiredメンバーを触ってみます。 準備 .NET 7をインストールしておきます。この記事を書いてる時点では7.0.100-rc.1というバージョンでした。 dotnet.microsoft.…
C#でマイクラがアツイという噂を聞いたので試してみます。 準備 サーバー マインクラフトのサーバーをあらかじめ用意しておきます。 Dockerで動かすのが一番ラクそうだったのでこちらのDockerイメージを使ってサーバーを動かしました。 hub.docker.com docke…
AWS SDKのAPIを使ってAWSのサービスを使う際、ユーザーのホームディレクトリにある.aws/credentialsを使って認証されますが、ローカルのDockerで実行時にはこれが無いためAPIの呼び出しに失敗します。 docker-compose.ymlで認証情報を共有できるようにします…
先日こちらのイベントで出題された問題を自分でもやってみました。 togetter.com 次のようなあいうえおの文字列を加工して、 const string aiueo = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもや ゆ よらりるれろわ をん"; 最…
小田急である広告の前でだけ学生数人がノート出してて何事かと思ったらこの広告が原因だった。解いたらスッキリする答えが出てきて、答え合わせできないけど確実に正解なのが分かった pic.twitter.com/bszZ0QQQJ5— 電電猫猫|高橋直希@CoeFont (@nya3_neko2) …
ViGEm.NETというライブラリを使ってC#で簡単な仮想ゲームコントローラを作ってみます。 ViGEmはVirtual Gamepad Emulator Frameworkの略だそうです。読み方は謎です。C#用のライブラリが公開されているので使っていきます。 github.com 実行環境 Windows 10…
VSCodeでC#のコンソールアプリをデバッグ実行したとき、dllを読み込むメッセージがたくさん表示されます。 設定前のデバッグコンソール アプリから出力したメッセージが埋もれてしまって見にくいので、これを表示しないようにしてみます。 .vscode/launch.js…
CySharpから出ているProcessXが良いらしいぞという噂を聞いたので試してみました。 ProcessXはcmdやPowerShellで実行するコマンドたちをC#から呼びやすくするライブラリのようです。 github.com やってみる 試しにdotnetコマンドを実行してバージョン情報を…
ステージング機能が気になった&良さそうだったので試してみました。 そもそもステージング機能とは Azure Static Web Appsを使ったWebアプリケーションは、GitHubのリポジトリに変更があるとCI/CDが走って本番環境が更新されるようになっています。 例えばd…
サードパーティ製のFF14のランチャーにFFXIVQuickLauncherというものがあります。 公式のランチャーよりもシンプルで、クライアントの起動が速い、Discordとの連携機能があるとかいろいろと便利らしいです。 FFXIVQuickLauncherを起動した直後の画面 公式の…
文字列の整形をするときにRange構文を使ってみたらかなり体験が良かったのでまとめました。 C#8.0から配列などに対してarray[x..n]のような書き方ができるようになりました。配列のxからnの範囲を取得するような感じです。 ハイフンなしの郵便番号をアタマ3…
つい先日、「Kakuge Lounge Finder」というBlazor WebAssemblyで作ったWebアプリを公開しました。 www.kakuge-lounge.com 格ゲーでオンラインの対戦相手を募集する際に、希望の対戦相手の条件などをツイートしてTwitter上で募集するという文化があるのですが…
BlazorとAzure Static Web Appsが気になってたのでやってみました。 GitHubにリポジトリ作成 Azure Static Web Appsにデプロイする際のソースとしてGitHubのリポジトリを使うので、Blazorで作った WebアプリのソースをGitHubに上げておきます。 今回はBlazor…
ValueTupleを使うと一時変数を使わずに変数のスワップができるというのを聞いたので試してみました。 とりあえずやってみる 言われるがままにintの変数を2つ用意してスワップしてみました。 var a = 1; var b = 3; // スワップ前 // a = 1, b = 3 Console.Wr…
FFXIVで戦闘系エンドコンテンツを攻略する人にとってはおなじみのAdvanced Combat Tracker(以下ACT)という便利ツールがあります。 advancedcombattracker.com C#でプラグインを自分で作ってインポートできるようになっているのですが、 プラグインを作る際…
C#9から登場したrecordで型が定義できるようになって、record、class、structなどよく分からなくなってきたので、いろいろ比較しつつ整理してみました。 class struct record 参照型 or 値型 参照型 値型 参照型 継承 できる できない できる Equals() 参照…