CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。
ライブラリはnugetで探す 新しく追加された公式APIは、ライブラリとしても公開されている事が多い。 たとえばTimeProviderは.NET8以降だが、 nugetで追加ライブラリとしても公開されていて、 対応バージョンが「.NET Standard 2.0」や「.NET Framework 4.6.2」の古い環境でも使える。 .NET 8 .NET Standard 2.0 .NET Framework 4.6.2 APIリファレンス(MS learn)にはこのことが書かれてないので注意。 対応バージョンだけで判断してはいけない。 MSが公式に出している事が多いのでMicrosoft.~で始まる名前で調べると出たりする Microsoft.Bcl.~ .NET Standard2.0でも使える新しめのAPI 追加ver: .NET 8 ~ FrozenDictionary<T> /
この記事は以下のツイートから始まる疑問に対する回答みたいな記事です。 満たしたい要件としては、ASP.NET Core Blazor WebAssembly をフロントにしつつ、サーバーサイドは ASP.NET Core で Web API も作れて、同じサイトにフロントエンドとバックエンドの両方を配置できるようなプロジェクトを作ることです。 箇条書きにすると以下のような感じですね。 フロントエンドは ASP.NET Core Blazor WebAssembly バックエンドは ASP.NET Core Web API (もしくは Minimal APIs) 発行すると1つに纏まってフロントエンドとバックエンドと同じサイトに配置できる 先に解説 ASP.NET Core は DI コンテナ内にどんなサービスを登録するかということと、どんなミドルウェア(リクエストを処理するパイプライン)を
c#って何 "C#(シーシャープ)は、Microsoft社が開発した、汎用のマルチパラダイムプログラミング言語である。C#は、Javaに似た構文を持ち、C++に比べて扱いやすく、プログラムの記述量も少なくて済む。また、C#は、.NET Framework上で動作することを前提として開発された言語であり、WindowsアプリケーションやWebアプリケーションの開発に適している。" という風にwikipedia先生が言っていたのでアプリを作ってみようと思う。 基本 とその前にバージョンがあるらしいので確認。 C:\Windows\Microsoft.NET内のFrameworkやFramework64 の中にあるファイルがバージョンかな。 その中のcsc.exeがコンパイルする奴らしい ただ、そのまま実行してもコンパイルできないから cmd(コマンドプロンプト)で呼び出さないといけないらしい
R3のコードから見るC#パフォーマンス最適化技法実例とTimeProviderについて 2024-05-01 4/27に大阪で開催されたC#パフォーマンス勉強会で「R3のコードから見る実践LINQ実装最適化・コンカレントプログラミング実例」という題でセッションしてきました! タイトル的にあまりLINQでもコンカレントでもなかったかな、とは思いますが、R3を題材に、具体的なコードをもとにした最適化技法の紹介という点では面白みはあったのではないかと思います。 Rxの定義 R3は、やや挑発的な内容を掲げていることもあり、R3は「Rxではない」みたいなことを言われることもあります。なるほど!では、そもそも何をもってRxと呼ぶのか、呼べるのか。私は「Push型でLINQ風のオペレーターが適用できればRx」というぐらいの温度感で考えています。もちろん、R3はそれを満たしています。 mutable st
要約 C#のDictionaryのキーとして2つのint x,y (ただしxとyは[-32768, 32767]の範囲内)を使いたい場合、(x << 16) ^ yとHashCodeを計算すると処理が早くなりました。 When use two int x and y (where x and y range is [-32768, 32767]), as keys in a C# Dictionary, computing the hash code using the expression (x << 16) ^ y can improve performance. 背景 xとyが高々[-10000, 10000]の範囲に収まるグリッド状の2Dマップがあって、1マスごとにDataクラスを持つとします。方法はいくつかあると思いますが、まずは2次元配列を試してみます。 // 巨大すぎる配列を
今回の記事はDependency Injection(依存性の注入)について。 設計についての学習を始めると「依存性の逆転」「Dependency Injection(依存性の注入)」「DIコンテナ」など言葉を耳にする機会が増えてくると思います。適切にDIを扱えるようになると設計の柔軟性が飛躍的に向上するため、是非とも習得したい知識です。 今回は「そもそもDependency Injection(依存性の注入)とは何なのか」という話から始め、サービスロケータやDIコンテナについてまで解説していきたいと思います。 またこの記事ではSOLID原則(特に依存性の逆転)等の知識を前提として進めるため、設計何もわからん!という方は以下の記事から読むことをお勧めします。記事の後半で依存性の逆転について触れているため、その辺りを押さえてからDIについて学ぶと良いでしょう。
去年の3月にブログに書いたものの続報。 C# でも限定的に破壊的変更を許していこうかという話だったわけですが、 ちょっと具体化しました。 ある機能を実現するにあたって破壊的変更の原則と進め方についての話をしています。 破壊的変更の候補 C# 13 で導入したい field アクセス(自動プロパティのバッキングフィールドにアクセスするための field キーワード)と、 これまでに破壊的変更を避けるためにちょっと変な設計になっている var (型推論変数宣言)、_ (discard)が検討の対象になっています。 破壊的変更を認める基準 あくまで控えめな破壊的変更で、エンドユーザーに明確なメリットがある 破壊的変更を踏むようなコードは割かしレア 破壊的変更を起こす予定のコードはどういう理由でどこが問題で、どう直せばいいかが明確に示せる 破壊的変更を避けられるよう、完全に自動で、簡単で、堅牢で、
概要 普段なにげなくUnityでC#を使っていたけれど、.NETとか.NET Frameworkとか、.NET Coreとかの違いをよく分かってなかったな~と思ったので、簡単な歴史や名称の違いを自分用にまとめてみました。 間違っている部分があるかもしれませんが、多めに見ていただけますと幸いです。 .NETとは 2000年6月に掲げたMicrosoft .NETという構想が元になっている。 現在のIoTに近い、様々な情報デバイスをネットワークに接続させて、インターネット経由でつながることを目指すというものであった。 その後、Visual Studio .NETが発表され、これが今の.NETの原型になっている。 現在では、Microsoft .NETという呼称は使われておらず、現在使われている.NETは.NET Frameworkの呼称のひとつとなっている。 しかし、後述の内容により、.NET
はじめに C#でアプリケーションを開発中、ビルドをすると、不要な言語フォルダおよびアセンブリファイルが出力される問題に遭遇しました。 その解消を行った備忘録です。 環境 アプリケーションのターゲットフレームワーク:.NET6 開発ツール:Visual Studio 2022 問題の詳細 使用しているNuGetパッケージのバージョンを上げたところ、本現象が発生しました。 今回enフォルダは英語リソースを作成しているため必要なのですが、以下の画像のように、不要なその他の言語のフォルダが出力されました。 また、各フォルダには、以下のファイルが出力されていました。 System.Private.ServiceModel.resources.dll そのため、ライブラリで参照しているNuGetパッケージ(System.Private.ServiceModel)で、ローカライゼーションを有効にしたのが
今回の話 「Visitorパターン」を使ってswitch文やif文での型分岐を置き換えてみよう、という話です。C#で書いてます。 (サンプルコードはだいぶ端折ってるのであまり突っつかないで下さい) switchやif文のどこが良くないのか 「型の判定によって処理を分岐する」という実装をswitchやifで作ってしまうと、後から構造を変更した際などに問題が起きる可能性があります。 (そもそもオープンクローズド原則違反になってしまう) たとえば「型をみてデータ構造を変換する」といった場合はこの問題を踏みやすいです。 例:データ構造を1:1変換する 「RPGのキャラクター(ジョブ)」という概念があったとしましょう。 これは基底クラスであり、派生先にいくつかのジョブがあってそれぞれで独自のパラメータを保持しています。 /// キャラクターの抽象クラス public abstract class C
Microsoft Build 2024 で .NET Aspire のバージョン 1.0 がリリースされました。 ここでは、その .NET Aspire の説明をしたいと思います。 公式ドキュメントは以下になります。 ここでは公式ドキュメントとはちょっと違った切り口で解説していこうと思います。 .NET Aspire とは .NET Aspire は、複数のサービスで構成されるアプリケーション開発やデプロイを支援するツールやライブラリの集合体です。 ここでいうサービスは自分たちで開発するマイクロサービスのこともあれば、既存のサービスやミドルウェアを指すこともあります。つまり単一の Web アプリが Redis や SQL Server に依存するといったケースでも .NET Aspire の恩恵を受けることが出来ます。 また .NET Aspire はアプリケーション開発フレームワークで
こんにちは。職業「戸倉彩」です。 Visual Studio Code(以下、VS Code)は、その拡張性の高さで世界中の開発者から支持されています。特に、「コード生成」を行なってくれる拡張機能は、プログラミング作業の効率化に大きく貢献しています。今回は、VS Codeで利用できるコード生成拡張機能を3つ選定し、紹介していきます。 ※本記事は、2023年12月1日時点で公開されている情報に基づいています。 1. GitHub Copilot / GitHub Copilot Chat GitHub Copilot - Visual Studio Marketplace GitHub Copilot Chat - Visual Studio Marketplace *プレビュー版 GitHubが公開している拡張機能。すでに1,000万以上もの数がダウンロードされています。 2023年に試す
概要 ASP.NET Coreのコントローラから呼び出しているScopedサービスのクラスをバッチ処理からも呼び出そうとしたらエラーになった 原因はDIコンテナのスコープ範囲(ASP.NET Coreではリクエスト単位)がバッチ処理だと違ってくる為だった ASP.NET Coreと同様に、処理の呼び出し毎にDIコンテナのスコープを生成するようにしたらうまくいった 内容 次のようなASP.NET Coreのコントローラがあり、その中でMyLogicのDoWorkAsyncメソッドを呼び出している。 MyLogicには様々なScopedサービスが注入されており、DIコンテナを利用してコントローラに注入される。 ASP.NET Coreではサービスのスコープ範囲は「リクエスト単位」である為、DoWorkAsyncの呼び出しも基本、1回毎に異なるスコープで呼び出されることになる。 public c
内容 C#の非同期メソッドが実行されるスレッドはThreadPoolクラスが生成したワーカースレッドですが、これを指定したスレッドに切り替える方法を紹介します。 スレッド切り替えの様子 非同期メソッド中でSwitchToメソッドを呼び出すことでそれ以降の動作スレッドを切り替えます。 切り替えの様子: async Task SwitchToTestAsync() { Console.WriteLine(".NET ThreadPoolクラスのワーカースレッドまたは起動元スレッド上"); await mainThreadQueue.SwitchTo(); Console.WriteLine("メインスレッド上"); await userThreadPool.SwitchTo(); Console.WriteLine("自前スレッドプールのワーカースレッド上"); await Task.Yiel
最近、C#界隈でもGrphQL案件が増えてきたので調査してみました。 GraphQLサーバ ふざけた名前のホットチョコレート(Hot Chocolate)?!を使ってみたいと思います。 Microsoftも紹介しているのできっと大丈夫でしょう! 準備 1. VisualStudio2022で空のASP.NETCoreプロジェクトを作成作成します。 2. NugetでHotChocolate.AspNetCoreを追加します。 今回テストしたスキーマ 今回は以下のスキーマを定義したいと思います。 Authorとそれに紐づくBookを想定(1対多) 今回はQueryだけ type Query { authors: [Author] books: [Book] } type Author { id: Int! name: String! books: [Books] } type Book {
同社は、実稼働アプリケーションを最適化するためのツールとして、ネイティブAOTとアプリケーショントリミングの開発を行っており、.NET 8ではwebapiaotを用いてトリミングとAOTの両方に対してWeb APIアプリケーションを最適化した。 .NET 9では、他の種類のアプリケーションでも同様のことを行うべく、すべてのASP.NET CoreアプリケーションにてDATAS GCの改善に取り組んでいる。Azure Container Appsパートナーは、Kubernetesベースの環境内で.NET 9アプリケーションを複数のインスタンスへ簡単に拡張できるようにしており、Microsoftとの協力によって偽造防止トークンや認証トークンといった一時的なデータが、データ保護を使用して正しく暗号化され、レート制限APIが改善され各ノード間で最適な動作が保証されるよう取り組んでいるという。 Vi
はじめに grpcでC#からpythonへ通信をする方法をまとめました。 リポジトリ:https://github.com/kz-000/grpc_example プロジェクトの構成は以下のようになっています。 grpc_example ├ api (protoファイル) ├ client (C#) └ server (python) API 今回はIDを受け取り、ユーザー名を返すような簡単なAPIを実装しようと思います。 //user.ptoro syntax = "proto3"; package api; message GetUserRequest { int32 Id= 1; } message GetUserResponse { string Name = 1; } service UserService{ rpc GetUser (GetUserRequest) return
Building a self-contained game in C# under 2 kilobytesHow I fit a graphical game in C# into 2 kilobytes, with no .NET runtime required. NOTE: This is a refresh of my 4 year old article but with a more interesting game and a much smaller file size this time. As someone who grew up in the times of 1.44 MB floppy disks and 56 kbit modems, I’ve always liked small programs. I could fit many small progr
概要 .NET MAUIで、普通のデスクトップアプリをビルドする方法の話です。普通というのは、msixインストーラで配布するパッケージではなく、exeとdllを作ってmsiインストーラなどで配布するタイプのアプリです。 先に結論まとめ プロジェクトファイルに<WindowsPackageType>None</WindowsPackageType>を追加 launchSettings.jsonのcommandNameをProjectに 発行はdotnet publishコマンドに「p:WindowsPackageType=None」を付ける 以上で、普通のデスクトップアプリとしてビルド・デバッグ・発行ができます ただしまだ問題点が多いようなので、実運用の開発への採用は要注意 話の背景 .NET MAUIでWindowsアプリを作ろうとすると、msixインストーラで配布するという形の、どちらか
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く