しばやん雑記

Azure とメイドさんが大好きなプログラマーのブログ

.NET

MSBuild SDK ベースになった Azure Functions の新しい .NET Isolated SDK がプレビューに

Azure Functions の .NET Isolated はビルド時に内部プロジェクトを作成し、必要なファイルを生成する仕組みになっているため、SDK として NuGet パッケージ Microsoft.Azure.Functions.Worker.Sdk が必要になっていますが、少し前に新しく MSBuild SDK ベー…

Agent Framework で作成した Agent を A2A で公開して Durable Agents から利用する

少し前に GA したこともあり、そろそろ Agent Framework をちゃんと触っておかないといけなくなったので、基本的に最小コードで動くようなものをベースに検証することにしました。公式のサンプルやドキュメントは古いバージョンのコードが混ざっていることが…

C# の Source Generator を使って OpenAPI 定義からクライアントを生成するライブラリを公開しました

これまで OpenAPI 定義から C# 向けのクライアントが必要な場合は OpenAPI Generator や AutoGen、あるいは NSwag といったツールを使ってきたのですが、それぞれのツールに癖があり割と妥協して使うことが多かったです。個人的には OpenAPI 定義だけ置いて…

.NET Isolated 版の Durable Functions を使った開発を始める

Ignite のタイミングで Flex Consumption が GA したこともあり、そろそろ .NET Isolated 向けの Durable Functions を使いたい気持ちが高まってきたのでしっかりと確認しておくことにしました。以前調べたときは対応していない機能も多かった気がするのです…

Azure Functions が .NET 9 に対応したのでアップグレードする

先週開催された .NET Conf 2024 で .NET 9 が正式リリースされましたが、同じタイミングで App Service と Azure Functions についても .NET 9 GA 版への対応が行われたため、現時点では Flex Consumption 以外で利用可能になっています。Azure Functions チ…

Prompty を C# で扱うライブラリがリリースされたので試した

今年の Microsoft Build で突然 Seth が発表した Prompty ですが、これまで扱いが悩ましかったシステムプロンプト周りを上手く外部ファイルとして扱えるのと、VS Code 拡張を使うとファイルを直接 OpenAI で実行できるのでプロンプトの開発段階から、アプリ…

Microsoft.Extensions.AI 向けに ONNX Runtime Generative AI を使うクラスを書いてみた

前回試してみた Microsoft.Extensions.AI (MEAI) は OpenAI や Azure AI Inference 向けにはライブラリが用意されているので、非常に簡単に Generative AI の機能を利用出来るようになっています。抽象化されたインターフェースにより、OpenAI や Azure AI I…

Microsoft.Extensions.AI のプレビューが公開されたので試した

昨夜 C# 向けの新しい拡張ライブラリとして Microsoft Extensions.AI のプレビューが公開されました。突然出てきた感が凄いですが、個人的には Microsoft.Extensions 名前空間に用意されたライブラリは有用なものが多いので気に入っています。今回は AI 向け…

ONNX Runtime の QNN Execution Provider を使って Snapdragon X Elite の NPU で画像分類を行ってみた

そろそろ NPU を使うとどのくらいの性能が出るのか気になっていたのですが、DirectML の Snapdragon X Elite の NPU 対応は自分の手元では全然動作しなかったので、ひとまずは Qualcomm AI Engine Direct SDK (QNN SDK) を使って NPU を使ってみることにしま…

C# と ONNX Runtime Generative AI (DirectML) を利用して Phi-3 Vision をローカルで動かす

以前に ONNX Runtime Generative AI に対応した Phi-3 mini / medium のモデルを利用して、ローカルマシンの DirectML アクセラレーションが効く形で動かしてみました。本命と考えている NPU に最適化された Phi-Silica はまだ利用可能になっていないので、…

Azure Functions の .NET In-Process 向け .NET 8 サポートがリリースされました

公式ブログで予告されてからかなり時間がかかっていましたが、ようやく Azure Functions の .NET In-Process Model での .NET 8 対応がリリースされました。大々的なリリースは行われておらず、GitHub の Issue とドキュメント更新に留まっているのは開発チ…

C# と ONNX Runtime Generative AI (DirectML) を使って Phi-3 をローカルで動かす

Build 2024 では Windows などローカルのリソースを使って Generative AI を動かすという話が非常に多かったように、Keynote でも度々取り上げられた Phi-3 についても AWQ で 4-bit 量子化された DirectML で利用可能な ONNX モデルが公開されています。セ…

WPF で Data Binding と Command を使ったアプリケーションをシンプルに書きたかった話

数年前から WinQuickLook という Windows アプリケーションを趣味で開発しているのですが、内部実装をガラッと変えた新バージョンの開発進捗が著しく悪いことに悩んでいました。現在 V4 というソリューションで絶賛開発中となっていますが、リリース日は未定…

NuGet 6.4 の Central Package Management を使って複数プロジェクト間のバージョン管理を改善する

Visual Studio 2022 17.4 以降に含まれている NuGet 6.4 では、複数プロジェクトでのバージョン管理を一元化出来る Central Package Management が実運用可能なレベルとして提供されています。NuGet などのパッケージマネージャを利用する際の共通の悩みが、…

Windows Property System を使って C# から曲情報を取得する

GW なので趣味アプリの開発を行っていると、音楽ファイルに保存された曲情報を取得する必要が出てきたので、Windows Property System を使って実現したという話です。曲情報というのは以下のようにファイルのプロパティから確認出来るメタデータのことです。…

CsWin32 で Win32 API や COM を使ったアプリケーション開発を効率化する

これまで P/Invoke 定義はドキュメントやヘッダーファイルから手書きすることが多かったのですが、最近は必要な Win32 API や COM インターフェースが多くなってきたので CsWin32 を使って自動生成しています。CsWin32 自体は win32metadata というプロジェ…

.NET 6.0 にアップグレードすると ReadyToRun ビルドが失敗するようになったのを直す

.NET Core 3.0 からビルド時に Tier 0 のネイティブコードを生成する ReadyToRun が利用可能になっています。実行時に Tier 0 のコード生成を行わない分、スタートアップの高速化が期待できる機能です。.NET 6.0 は Windows x64 環境なら全てのクロスコンパ…

Cosmos DB SDK v3 に追加された ReadMany API を使って効率的に複数項目の取得を行う

去年リリースされた Cosmos DB SDK v3.18.0 から Point Read のような API で複数項目を 1 回のメソッド呼び出しで行える ReadMany API が追加されています。Point Read のような API デザインなので Id と対応した PartitionKey 両方の指定が必要です。API …

.NET Framework 3.0 で作られたアプリケーションを .NET 5 に最新化して GitHub で公開するまでに行ったこと

CodePlex に置いてあった .NET Framework 3.0 時代に書かれたアプリケーションを、GitHub に移行しつつ .NET 5 で動くように 2 週間ぐらい頑張った話を書きます。正直なところ 12 年前に書かれたコードを何とかするのはめっちゃ大変でした。今回コードの改善…

Azure AD B2C にカスタムドメインを設定して MSAL (C# / JavaScript) から使ってみた

恐らく Azure AD B2C を使っている人全員が待ち望んでいたカスタムドメイン対応ですが、Front Door と組み合わせる形にはなりますが Preview として公開されました。単純に Front Door をリバースプロキシとして使うだけなのですが、割と現実的な落としどこ…

.NET 6.0 Preview で WPF が ARM64 に対応したのでビルドして Surface Pro X で試した

.NET 5.0 で Win Forms は ARM64 の Windows に対応しましたが、WPF は 2021 年に先送りになっていて非常に残念でしたが、最近リリースされた .NET 6.0 Preview の Nightly Build でついに対応しました。GitHub の Issue ではマイルストーンが 5.0.0 になっ…

NuGet のロックファイルと CI でのパッケージキャッシュ

基本的に NuGet に関しては CI でのパッケージのキャッシュがあまり効果的ではないのですが、推奨設定での使い方をちゃんと試しておこうと思ったので残します。GitHub Actions や Azure Pipelines には NuGet 向けのサンプル定義が用意されています。中身は…

Managed Identity を使った SQL Database の認証がとても簡単になった話

App Service のドキュメントには Managed Identity を使って SQL Database を利用するサンプルが載っていますが、ここのサンプルコードは結構いい加減で特に .NET Core 向けでは使う気がしないものでした。サンプルコードがダメなだけで SQL Database の設定…

WPF と WebView2 で MSAL を使わずに Azure AD 向け認可コードフローを実装してみた

普段は App Service の Easy Auth を使ってサクッと済ませるのですが、ちょいちょい MSAL を使った Azure AD や Azure AD B2C へのログイン処理をアプリケーションに組み込むことがあります。特にネイティブアプリケーションの場合が多いので、.NET Core の …

Azure App Service の .NET 5 Early Access を一通り試してみた

.NET Conf 2020 で .NET 5 が正式リリースされましたが、同じタイミングで App Service での .NET 5 Early Access 機能が発表され、多少の制約はありますがリリースとほぼ同時に利用可能になりました。App Service Teams のブログと GitHub にドキュメントが…

GitHub Actions / Azure Pipelines 上での .NET Core アプリケーションのビルド時間を短縮する

最近は Azure DevOps で開発していたアプリケーションを GitHub に移行しつつ、ビルドとデプロイ周りを Azure Pipelines から GitHub Actions に切り替えていたのですが、アプリケーションのビルドに時間がかかっていたので短縮するために色々と作業をしまし…

WPF で WindowChrome を使った時のシステムメニューを消す

WPF アプリケーションを書いていて、ユーザーからは閉じることが出来ない Window を作る必要があったのですぐ出来ると調べていたら、思った以上にはまったのでメモとして残します。Windows では Window を閉じるための方法がいくつか存在していますが、以下…

Visual Studio と ReSharper で EditorConfig を作成して Azure Pipelines でチェックする

GitHub で公開してるコードに Pull Request が来た時、思ってた以上にコーディングスタイルがバラバラで困ってたので EditorConfig を追加して CI でチェックするようにしました。C# はみんなが Visual Studio を使っていて、大体は良い感じのコーディングス…

.NET Core 3.0 で WinForms / WPF を使う場合は実行ファイルのパスに注意

.NET Core 3.0 では WPF や WinForms が使えるようになっていて、配布時には大体 Self-contained かつ Single-file executables としてパッケージングするのが一般的になるはずです。Desktop Bridge を使って APPX / MSIX を作るのに近い形ですが、よりカジ…

Azure Pipelines の Hosted Agent を使うと C# 7.1 以降のコードがビルド出来ないのを直す

Azure Functions なプロジェクトのビルドで Azure Pipelines を使っていたところ、手元ではビルド出来ていたコードが Azure Pipelines だとビルドエラーになってしまったので、最適な解決策を調べていました。具体的には C# 7.1 以降のコードが Azure Pipeli…