タグ

c#に関するgriefworkerのブックマーク (208)

  • IncrementalSourceGeneratorの開発&デバッグ方法 序 - Qiita

    はじめに 皆さんこんにちは。つい先日もアドカレでC#関連の記事を書いたところですが、.NET6のアドカレの枠が少し余っていたのを契機に、今度はより汎用的な内容をお送りしたいと思います。 今回は、上の記事で紹介したTypescriptとの相互運用機能を例に、.NET6から使えるようになったIncremental Source GeneratorのAPIの使い方を解説していきます。 若干ノイズ1がありますが、特に質に関してはわかりやすく砕いて解説するつもりなので、是非みていってください。 対象読者 C#の基礎とLINQを理解しており、メタプログラミングに興味のある方。 今回作るもの 画像のように、C#コードと同じディレクトリにTypescriptのファイルを配置すると、partial classとして、Typescriptのバインディングを生成するジェネレーターを作ってみましょう。 expo

    IncrementalSourceGeneratorの開発&デバッグ方法 序 - Qiita
  • .NET 6からのC# Incremental Source Generatorの開発入門

    記事はもなふわすい~とる~むアドベントカレンダー 2021に登録しようと思ったら全部埋まっていた上にC#アドカレその1にも登録できませんでしたのでその2に登録することといたします。 25日の記事です。 筆者環境 Windows 10 Visual Studio 2022 version 17.0.3 .NET Compiler Platform SDK .NET 6.0.101 概要 当記事では昨年作ったEmbedResourceCSharpというSource GeneratorをIncremental Source Generator(以下ISG)に対応させ、Visual Studio 2022以前Roslyn version 3しかない環境でもNuget経由でインストールして動作するようにします。 背景 Source Generatorの失敗 .NET 5とC#9.0と共に華々しく登

    .NET 6からのC# Incremental Source Generatorの開発入門
  • Roslyn APIを使って、構文ツリー解析を行う方法 - えんじにあ雑記!

    Roslyn APIを使用して、CSharpコードの構文ツリー解析を行う方法を解説します。 ※こちらの記事は2021.12月のC#アドベントカレンダー6日目の記事になります。 はじめに .NET Compiler Platform SDK(Roslyn APIs)とは 構文ツリーとは Microsoft.CodeAnalysis.SyntaxTreeクラス Microsoft.CodeAnalysis.SyntaxNodeクラス Microsoft.CodeAnalysis.SyntaxTokenクラス Microsoft.CodeAnalysis.SyntaxTriviaクラス 構文ツリーの解析(Rootからの手動探索) 1. 構文ツリーの作成 2. Rootからツリーを探索していく 2.1 トップレベルで宣言されたusings一覧を取得する 2.2 RoslynApiTutorialと

    Roslyn APIを使って、構文ツリー解析を行う方法 - えんじにあ雑記!
  • dotnet-6.0におけるNativeAOTについて - Qiita

    はじめに これは、「祝 .NET 6 GA!.NET 6 での開発 Tips や試してみたことなど、あなたの「いち推し」ポイントを教えてください【PR】日マイクロソフト Advent Calendar 2021」の9日目の記事となります。 NativeAOTに興味を持ったのは、Delphi 5で作成されていたインターフェイス用のコンソールアプリケーションがあり、C# に作り変えたのですが、速度でDelphi(ネイティブコード)に勝てないんですよね。 C#版でもネイティブコードになれば Delphi版に近づけるかも知れない、そんな淡い期待をNativeAOTにしてましたよ。うらぎれらたけど・・・ .NETネイティブ .NETネイティブ(Native) とは、.NET を対象とするアプリケーションは、特定のプログラミング言語で記述され、中間言語(IL)にコンパイルされます。この中間言語(IL

    dotnet-6.0におけるNativeAOTについて - Qiita
  • (C#) async/await を理解する - ネコのために鐘は鳴る

    この記事は Qiita C# Advent Calendar 2021 の5日目の記事です。 はじめに C# で async/await が登場してからずいぶんと時間がたち、モダンな C# においてはほぼ必須となりました。Unity でも UniTask などのライブラリもあり、簡単に非同期処理が書けます。この記事では C# での非同期処理の歴史にも触れつつ async/await の動作原理について書きます。 Unity C# の話を書いた方が需要が高そうなので Unity および UniTask を前提にした説明とコードが多く出てきますが、async/await は C# の言語機能であるため、動作原理自体は .NET でも同じです。非 Unity の文脈では適宜読み替えてください。 また、詳細を完璧に説明するよりもわかりやすさを重視したため、一部正確さを欠いた説明をしています。ご了承

    (C#) async/await を理解する - ネコのために鐘は鳴る
  • neue cc - .NET 6とAngleSharpによるC#でのスクレイピング技法

    C# Advent Calendar 2021の参加記事となっています。去年は2個エントリーしたあげく、1個すっぽかした(!)という有様だったので、今年は反省してちゃんと書きます。 スクレイピングに関しては10年前にC#でスクレイピング:HTMLパース(Linq to Html)のためのSGMLReader利用法という記事でSGMLReaderを使ったやり方を紹介していたのですが、10年前ですよ、10年前!さすがにもう古臭くて、現在ではもっとずっと効率的に簡単にできるようになってます。 今回メインで使うのはAngleSharpというライブラリです。AngleSharp自体は2015年ぐらいからもう既に定番ライブラリとして、日でも紹介記事が幾つかあります。が、いまいち踏み込んで書かれているものがない気がするので、今回はもう少しがっつりと紹介していきたいと思っています。それと直近Visual

  • C# から Azure の Log Analytics にクエリを投げる

    ここを見ながらやっていきます。 コンソールアプリプロジェクトに以下の参照を追加します。 Microsoft.Azure.OperationalInsights Microsoft.Rest.ClientRuntime.Azure.Authentication アプリ内にキーやらなんやらを埋め込むと、めんどくさいので今回作る例ではユーザーシークレットから読み込むようにしておこうと思います。なので以下のパッケージも追加しておきます。 Microsoft.Extensions.Configuration.UserSecrets Microsoft.Extensions.Configuration.Binder ユーザーシークレットには以下のような感じのデータがあることを想定して置く感じでコードを書いていきましょう。 { "WorkspaceId": "", "ClientId": "", "Cl

    C# から Azure の Log Analytics にクエリを投げる
  • Improvement Interpolated Strings 完全に理解した - 鷲ノ巣

    2021年11月リリース予定と思われる C# 10.0 に搭載予定の機能の一つである「Improvement Interpolated Strings」について、完全に理解したので記事にしてみます。 同機能の詳細な仕様は GitHub にあります。 github.com そもそも Interpolated Strings とは 復習から。 Interpolated Strings*1 とは、C# 6.0 から導入された機能で、以下のように書けるというものです。 $"Hello, {name}!!" 上記の結果は、変数 name の中身が "Joe" だったとすると、 "Hello, Joe!!" という文字列になります。 C# 5.0 以前では、こういうことをするためには string.Format メソッドを使って、以下のように書く必要がありました。 string.Format("Hel

    Improvement Interpolated Strings 完全に理解した - 鷲ノ巣
  • C#のソースジェネレータを開発する

    ユニットテストを書く場合、カバレッジのために必要なテストの多くは"価値の低い"ものです。それらが実際にエラーを検出する確率は、百分の一か、あるいはそれ以下でしょう。 プロパティのゲッタとセッタが意図通り動作することを確認するテストを、例として挙げましょう。 [TestMethod] public void @FirstName_SelfAssign() { var objectUnderTest = CreateObject(); var originalValue = objectUnderTest.@FirstName; objectUnderTest.FirstName = originalValue; Assert.AreEqual(originalValue, objectUnderTest.@FirstName, "Assigning a property to itself

    C#のソースジェネレータを開発する
  • パフォーマンス向上で知っておくべきコンピューターサイエンスの基礎知識とその実践

    はじめに こちらの記事をZenにも共有してコミュニティに貢献したいと思います。 ネット上には様々な記事が溢れていますが情報が断片化していてプログラムを始めた初心者には全体像を掴むのが難しいです。コンピューターサイエンスの基的な理解とパフォーマンスTIPSをまとめた記事があまり見当たらないのでまとめてみました。 ※コードの例はC#ですがホットパスやネットワーク通信の部分などはどの言語(PythonPHPJavaなど)でもそのまま活用できます。 全てを計測する パフォーマンスチューニングの最も大事な原則は計測することです。 計測用のツールをまとめておきます。 ■BenchmarkDotNet C#コードの計測をするツールです。Nugetから利用できます。Stopwatchクラスではなくこちらを使いましょう。StopwatchではGCなどの影響を正しく計測できません。 ■Visual St

    パフォーマンス向上で知っておくべきコンピューターサイエンスの基礎知識とその実践
  • MessagePipe - .NET と Unityのためのハイパフォーマンスメッセージングライブラリ

    Cy#の河合です。Cysharp名義でGitHub/Cysharp上で公開しているOSSの数も19個となるのですが、今回新しく .NET/Unity で使えるハイパフォーマンスなメッセージングライブラリ「MessagePipe」をリリースしました。 GitHub – Cysharp/MessagePipe 主にインメモリでのPublish/Subscribeパターンを支援し、統一的なインターフェイスであらゆるケースを網羅しています。例えばリアルタイム通信におけるMagicOnionやSignalRでの異なるHub間の通信、WPFなどのGUIアプリケーション開発におけるV-VM間の疎結合のためのメッセンジャーパターン(PrismライブラリにおけるEventAggregator)、サーバーアプリケーションでのCQRSアーキテクチャのためのMediatorパターンの実装(ASP.NETでのMed

    MessagePipe - .NET と Unityのためのハイパフォーマンスメッセージングライブラリ
  • 【Unity】怖くない!コルーチン解説

    はじめに Unityにはコルーチンと呼ばれる機能があります。 とても便利でちゃんと使えばかなり簡潔にプログラムを書くことができるようになります。 しかしこの「コルーチン」ですが、これ敬遠するUnity初学者の方を多く見ます。 私もUnityを覚えた直後は「Unityのプログラムを書くことがすでに大変なのに、コルーチンというよくわからないものを覚えて脳をパンクさせたくない」という思いからコルーチンを避けていました。 今思えばこれは非常に勿体ないことであったと感じています。 「よくわからないからコルーチンを使わず、Update()を使ってゴリ押しで書いてしまう」というやり方はプログラムを無駄にややこしくしてしまいます。 コルーチンをどういう場面で使うかをしっかり覚えた上で、適切に使えるようになりましょう。 早わかりUpdate()とコルーチンの違い 比較表 Update() コルーチン

    【Unity】怖くない!コルーチン解説
  • 目指すのは“C#大統一理論” Cysharpの多機能OSSで実現する最高の開発体験

    CA.unityサイバーエージェントが運営するUnityをテーマにした勉強会です。サイバーエージェントのサービス開発者と社外の開発者を交えて、Unityに関する知見を共有します。河合宜文氏からは、Cysharp社のOSSについて紹介がありました。 Cysharpのモットーは「C#の可能性を切り開いていく」 河合宜文氏(以下、河合):「A quick tour of the Cysharp OSS」というテーマでCysharpの河合が話します。お願いします。 私は河合宜文と言って、Cygamesの子会社であるCysharpという会社で社長をしています。今回イベントを主催したサイバーエージェントの子どもの子どもなので、孫会社です。Cysharpはいろいろとやってはいて、目に見えるところで一番大きなものは、OSSの提供だと思っているんですが、我々は「C#の可能性を切り開いていく」というのをテー

    目指すのは“C#大統一理論” Cysharpの多機能OSSで実現する最高の開発体験
  • neue cc - C#のasync/await再考, タイムアウト処理のベストプラクティス, UniTask v2.2.0

    お題を3つ並べましたが、記事は逆順で書いていきます!というわけで、UniTask v2.2.0を出しました。改めてUniTask v2とはUnityのためのゼロアロケーションasync/awaitと非同期LINQを実現するライブラリで、とv2リリース時の解説記事を貼っつけましたが、ちょいちょい細かい改善を続けてまして、今回v2.2.0になります。 PlayerLoopへのループ挿入のカスタマイズ対応 現状のUnityはPlayerLoop上で動いていて、Unity 2020.1のリストをここに置いておきましたが、デフォルトでは120個ぐらいのループがエンジンから駆動されています。UpdateループだけでもScriptRunBehaviourUpdate, ScriptRunDelayedDynamicFrameRate, ScriptRunDelayedTasks, DirectorUpd

  • ASP.NET Core の API の認証・認可をカスタマイズする方法 - Qiita

    Azure AD とか Azure AD B2C とか IdentityService4 とかを使うといい感じにはできます。 でも、例えば API Key での認証にしたいとか、なんらかの独自の認証の仕組みがあって、それに依存しないといけないとかいろんな事情が世の中にはあると思います。 やってみよう ASP.NET Core の APIプロジェクトを作成します。認証などはとりあえず無しで。 普段は Visual Studio 2019 を使うのですがファンが壊れていて発火したら怖いので VS Code on Macbook Pro でやりたいと思います ということで dotnet コマンドで作成して Visual Studio Code で開きましょう。

    ASP.NET Core の API の認証・認可をカスタマイズする方法 - Qiita
  • C#でまともなアプリ開発を行うために - Qiita

    はじめに C#は「Windowsでしか開発出来ない言語」などクローズドなイメージから一転し、.NET Coreの誕生によって様々なことが出来るようになりました。最近ではokazukiさんのC# で出来ること一覧が大きな反響を呼び、C#であらゆるアプリが作れることを多くの方に知ってもらえたかと思います。C#のよさを知ってもらうことは嬉しい限りではありますが、他言語をやってきた身としてはC#を取り巻くエコシステムの情報が少ないと感じることが多く、新たに参入される方にとって抵抗があるのも事実だと思います。この記事ではまともなアプリ開発を行うために必要なエコシステムなどご紹介し、C#でも快適に開発出来ることを知ってもらえれば嬉しいです。筆者はWEB開発を主としているので、WEB寄りな話が多くなる可能性がありますがご了承下さい。 「まとも」とは? タイトルにも書いたまともなアプリ開発とは、一定の品質

    C#でまともなアプリ開発を行うために - Qiita
  • (C#) 型の外部から疑似的に interface を追加する - ネコのために鐘は鳴る

    interface を後付けしたい interface は C# でポリモーフィズムを実現するために、メソッド・プロパティの宣言だけを決めておき、実際の挙動は型の実装者に任せるというものです。今更説明するまでもないですね、普段みなさんが使ってるやつです。 普通は型定義の段階で interface を継承させて使うのですが、例えば外部ライブラリで定義されている型に自作の interface を継承させることはできません。 public class Apple // 外部ライブラリのクラス { public string Name => "apple"; } public class Orange // 外部ライブラリのクラス { public string Name => "orange"; } public interface IName // 自作の interface { string

    (C#) 型の外部から疑似的に interface を追加する - ネコのために鐘は鳴る
  • C#でロックフリーなメモリープールを自作する - RoundWide Systems

    的にシングルスレッドでしか使わないライブラリを、速度を落とさずにスレッドセーフにするために、ロックフリーなメモリープールを自作した話を紹介する。この記事はC# その2 Advent Calendar 2020の18日目の記事である。 前回に続き、今回もDynaJsonの話である。DynaJsonについては前回を参照してほしい。実はDynaJsonはバージョン2.1.0まではスレッドセーフではなかった。私がデスクトップクライアントでしか使わないので、速度優先でそうしていた。しかし、テストをマルチスレッドで動かせないのがつらいので、バージョン2.2.0でスレッドセーフにした。 スレッドセーフにすると遅くなるのは、処理を呼び出すたびに、その処理に必要なデータを保持するインスタンスを生成する必要があるからだ。スレッドセーフでなくてよいなら、静的クラスで実装するか、一つインスタンスを生成して静的

  • neue cc - UnitGenerator - C# 9.0 SourceGeneratorによるValueObjectパターンの自動実装とSourceGenerator実装Tips

    ValueObjectは好きですか?私は大嫌いです。いじょ。 ざっくり言えばプリミティブ型に専用の型を付ける教義です。例えばUserIdをintとして扱っているとTeamIdと取り違えるかもしれないし、Hpに突っ込んでしまうかもしれない。StrengthとIntelligenceとAgilityとSpeedは別物なのだから全部intじゃなくて区別して欲しい、そうじゃないと間違った演算しちゃうぞ、と。まぁそういう自体を避けるために、それぞれラップした個別型を作るのです。int strengthじゃなくてStrength strengthだぞ、と。 これは一見正しく実際正しいのですが、問題もあります。一つに面倒くさい。ラップしたctorを作るのだけでも定形でウザ、と思いますが、更に等値とか実装するのは面倒くさい。また、そのままだと計算できなくなるので、算術演算のために生の値を.Valueで取り

  • [速報]マイクロソフト「.NET 5」正式リリース。1つのフレームワークでWindows/Mac/Linuxのデスクトップ、サーバアプリ、Webアプリなどが開発可能に

    [速報]マイクロソフト「.NET 5」正式リリース。1つのフレームワークでWindowsMacLinuxデスクトップ、サーバアプリ、Webアプリなどが開発可能に マイクロソフトは、アプリケーションフレームワークの最新版となる「.NET 5」正式版のリリースを発表しました。 .NET 5は「.NET Framework」と「.NET Core」フレームワークを統合し、その後継となるオープンソースのフレームワークです。 これにより長いあいだマイクロソフトのもっとも重要かつプロプライエタリなフレームワークだった「.NET Framework」が、その地位を正式にオープンソースの「.NET 5」へ譲ることになります。 Announcing .NET 5.0 https://t.co/dwjJTZA399 — .NET (@dotnet) November 10, 2020 .NET 5はWi

    [速報]マイクロソフト「.NET 5」正式リリース。1つのフレームワークでWindows/Mac/Linuxのデスクトップ、サーバアプリ、Webアプリなどが開発可能に
    griefworker
    griefworker 2020/11/11
    Xamarin との統合は .NET 6 に延期なのか。.NET 5 は .NET Core をリブランディングした形に落ち着いた印象。本番は .NET 6 かな。