はじめに 昨今Android/iOSネイティブアプリの開発では「宣言的UIを利用したUIフレームワーク」(以下、このようなフレームワークを宣言的UIフレームワークと本記事では呼称します)が台頭しようとしています。この流れは、Reactの考え方やそれ自体を利用したFlutterやReactNativeのようなマルチプラットフォームフレームワークから始まり、AndroidではJetpackCompose、iOSではSwiftUIと、現在はそれぞれのプラットフォームにも取り込まれるまでになっています。 宣言的UIフレームワークは旧来の手続き的な方法よりもより直感的にUIを記述することができ、採用することでViewの構築をより効率よく行うことができます。これまでは既存のアプリケーションにこの方法を取り入れようとした場合、FlutterやReactNativeであれば新規に言語すら違うフレームワーク
.NET Interactive is here! | .NET Notebooks Preview 2 In November 2019, we announced .NET support for Jupyter notebooks with both C# and F# support. Today we are excited to announce Preview 2 of the .NET Notebook experience. What’s new New Name – Meet .NET interactive As our scenarios grew in Try .NET, we wanted a new name that encompassed all our new experiences from the runnable snippets on the w
WinUI 3を内包するWindows App SDKの進捗は順調ながら、Microsoftが現地時間2021年10月18日にGitHubへ投稿した内容を見ると、UWP(Universal Windows Platform)に対する消極的な姿勢を色濃く感じた。 MicrosoftはWindows App SDKが「既存のデスクトップAPIと互換性があるため、基盤として使用できる。さらにUWPへの投資をデスクトッププロジェクトの種類で利用しやすくし、AIやFluentデザインなどの新しい機能を実現する」と述べている。これは、UWP開発への投資をWin32に振り戻すという文言だ。さらに「UWPプロジェクトの種類で.NET 5/6 を使用する必要がある場合は、プロジェクトをWinUI 3デスクトッププロジェクトに移行することを推奨する」とある。こちらは端的に.NET 5/6の使用不可を意味する。
Modern and Seamless UIs WinUI makes it easy to build modern, seamless UIs that feel natural to use on every Windows device. It embodies Fluent Design to enable intuitive, accessible, and powerful experiences and the latest user interface patterns. Unmatched Native Performance WinUI is powered by a highly optimized C++ core that delivers blistering performance, long battery life, and responsive int
はじめに Windowsフォームアプリをなるべく簡単に高DPI(Hi-DPI)対応させるコツをまとめました。 Windowsフォームの自動スケーリング機能を活用します。 今回やらないこと 下記機能が.NET Framework 4.7でサポートされましたが、実装コストが高いので対応はしません。 起動中のDPI変更サポート (Dynamic DPI) モニタ別のDPIサポート (Per monitor DPI) 対応方法 アプリケーションマニフェストの設定をする プロジェクトにアプリケーションマニフェストファイルapp.manifestを追加し、下記の設定を記入します。 この設定でWindowsが高DPIサポート済と認識してくれるので、表示がぼやけることが無くなります。 <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windo
Microsoftは2023年10月4日(米国時間)、「Visual Studio Code」(以下、VS Code)の「C# Dev Kit」拡張機能の一般提供を開始したと発表した。Windows、macOS、Linux、さらにはCodespacesで、ソリューションエクスプローラでコードを管理したり、ユニットテストの検出および実行機能を用いてコードをテストしたりでき、C#開発体験が向上するとしている。 C# Dev Kit拡張機能をインストールすると、VS Codeで提供されている拡張機能の「C#」「IntelliCode for C# Dev Kit」「.NET Runtime Install Tool」が自動的にインストールされる。 関連記事 Microsoft、Visual Studio CodeのUnity拡張機能を発表 利用方法は? Microsoftは、Visual Stu
はじめに C#でWindowsのソフトウェアを開発しているとWindows APIを呼び出すためによく使うDllImport属性。意外と適当に書いても呼び出せたりするけど、なるべく丁寧に書いてあげたくなるのが開発者の心情というもの。と言うわけでDllImportするときの個人的なメモ。 定義はNativeMethodsクラスで 昨今のVisual Studioでは、DllImportの定義は「NativeMethods」「SafeNativeMethods」「UnsafeNativeMethods」という名称のクラス内に定義しないとコード分析でCA1060の警告が出てくる。 クラスの中に定義したクラスでも良いので、こんな感じにする。 public class Test { private static class NativeMethods { [DllImport("user32.dll
.NET 7 introduces a source generator for P/Invokes that recognizes the LibraryImportAttribute in C# code. When it's not using source generation, the built-in interop system in the .NET runtime generates an IL stub—a stream of IL instructions that is JIT-ed—at run time to facilitate the transition from managed to unmanaged. The following code shows defining and then calling a P/Invoke that uses thi
.NET 6の現状を把握し、具体的な移行方法を学ぶ本連載「.NET 6移行入門」。第2回は、C# 10の新機能の中から注目の機能をピックアップして紹介します。 C# 10の新機能の特長は、「簡潔なコードを書くための機能」が多く追加されていることです。新しい機能を利用することで冗長な構文のコードを排除でき、簡潔で直感的なコードを記述できます。 レコード構造体 C# 9で「レコードクラス」が追加されましたが、C# 10では「レコード構造体」が追加されました。メンバーの数が少ない軽量オブジェクトの場合にクラスよりも速度が出る構造体のレコードを利用できます。 導入の意図 レコード型(レコード構造体、レコードクラス)は、簡潔なコードで便利にデータを格納するための型です。通常のクラスや構造体でデータモデルを作成しようとすると、データとしての等価性をサポートする「Equals」のオーバーライドや「ope
.NET 8 UnsafeAccessor を活用したライブラリ PrivateProxy を公開しました 2023-09-21 PrivateProxyというライブラリを公開しました。つまるところ、privateフィールド/プロパティ/メソッドにアクセスするライブラリなのですが、.NET 8 のUnsafeAccessorという新機能を活用することでNo Reflection、ハイパフォーマンス、AOTセーフになっています。 Cysharp/PrivateProxy もちろん .NET 8 でしか動きません!ので、.NET 8が正式リリースされた頃に思い出して使ってみてください。エクストリームな人は今すぐ試しましょう。 雰囲気としては、privateメンバーにアクセスしたい型があったとして、[GeneratePrivateProxy(type)]をつけた型を用意します。 using Pr
.NET Conf 2020 Online - .NET 5 リリース記念パーティートーク 面白く、ためになったので、文字起こししてみました。 告知内容 はじめに スピーカーのみなさま(敬称略) .NET Conf 2020 Online - .NET 5 リリース記念 自己紹介と推し機能 祝 .NET 5 リリース! スライド 動画 NET 5 / BCL / C# 9 ASP.NET Core / Blazor WebAssembly Entity Framework Core Cloud native / Microservices Xamarin / .NET MAUI Preview Windows 向け機能 / その他 NET 5 / BCL / C# 9 スライド 動画 Announcing .NET 5.0 .NET 5.0 Highlights Tools Native
Announcing Pylance: Fast, feature-rich language support for Python in Visual Studio Code We are excited to announce Pylance, our fast and feature-rich language support for Python! Pylance is available today in the Visual Studio Code marketplace. Pylance depends on our core Python extension and builds upon that experience, for those of you who have already installed it. Optimized performance Pylanc
概要 .Net Core で提供されている Generic Host(日本語だと汎用ホスト)について、何を意図したものなのか、どう使うのか、をまとめてみた。 ただし、非常に多機能なものなので、Generic Host の生成や、サービス/DI周りにフォーカスして記載してある。 開発環境 Visual Studio 2019 (16.4.0) .Net Core 3.1 背景 自分は4~5年前くらいまで.Net/C# で多少コードを書いていた(.Net 2.0 から 4.0の出始めくらいまで)。 で、最近久しぶりに .Net Core を使ってバックグラウンドで動作するアプリを作ることになったのだが、Visual Studio で以下のような感じのテンプレートコードが生成されて愕然。「ナンデスカ、コレ?」 public class Program { public static void M
Posted on December 14, 2019 | 12 minutes | 5579 words | yota ogino はじめに 少し遅刻しましたが、これはKotlin Advent Calendar 201914日目の記事です。 少し前からkotlinc-dotnetというKotlinを.Netで動くexe形式にコンパイルするコンパイラを作っていて、kotlinのコンパイラ周りの知見が溜まってきたので、この記事では自作Kotlinコンパイラの作り方を解説します 自作Kotlinコンパイラとは? 自作Kotlinコンパイラとはその名の通り、自作したkotlinコンパイラの事です。 現在Kotlin公式のコンパイラではJVM・JS・Native以外の環境でKotlinを動かすことはできませんが、独自でコンパイラを作れば任意の環境でKotlinを動かすことができます。 この
C#と言えば、Windows環境だけと思われがちですが、.Net CoreをLinux環境にインストールすれば、C#で開発したアプリケーションが動作します。また、Raspberry Pi(ラズベリーパイ)でも、C#を使ってIoT開発を行うことができます。この連載では、C#によるIoTプログラミングを解説します。 対象読者 IoTに興味があり、C#とRaspberry Pi(Linux環境)の基本的な知識がある方を対象とします。Linuxや電子工作の初歩的な説明は割愛していますので、「ラズベリーパイをつかったセンサープログラミング超入門」の記事なども併せて参照してください。 はじめに 前回は、仮想ファイルを使ったGPIOの操作を紹介しましたが、今回は、ライブラリを使って表示デバイス(ディスプレイ)を操作する方法を解説しましょう。 表示デバイス 今回あつかうディスプレイは、Raspberry
今日はゆる~く以下の記事を .NET 6 でやっていこうと思います。 今回は、元記事にあるとおり HttpClient クラスを使った方法で行こうと思います。 swagger.json からクライアントを生成したりといった方法もありますが、HttpClient を使った方法がとりあえず一番つぶしが効く方法であるのでやり方を知っておいて損はないです。 Web API から作ってみよう 元記事では Web API は存在するものとしてやってますが、今回は Web API を作るところからやろうと思います。 Visual Studio 2022 で ASP.NET Core (空) のプロジェクトを作ります。 これは一番少ないコード量で Web API が作れる Minimal API と呼ばれるタイプのプロジェクトになります。 とりあえず question プロパティを持つ以下の JSON を
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter. A custom editor extension for Visual Studio Code which provides a hex editor for viewing and manipulating files in their raw hexadecimal representation. Features Opening files as hex A data inspector for viewing the hex values as various different data types Editing with undo, redo, copy, and paste support Find and r
こんにちは、アーキテクトの小林です。 前回の記事で「データベースから設定情報を読み込む独自の ConfigurationProvider を作成して紹介してみたい」と書いておきながらも、コロナの影響やプロジェクトに忙殺されてしまったこともありまして、すっかり間が空いてしまいました。 今回は応用編となっていまして、ややディープなネタになっております。.NET Core の設定情報の基本から知りたい方は、以下の記事から先にお読みいただければと思います。 blog.ecbeing.tech blog.ecbeing.tech 目的と背景 さて、今回は設定情報をデータベースに保存して実行時にオーバーライドする機構を追加してみたいと思います。最初に「なぜ設定情報をデータベースに保存する必要があるのか?」という目的と背景について整理しましょう。 昨今のWebアプリケーションは、Dockerに代表される
最近のお仕事で、C#の非同期処理の書き方が分からずに、溶岩地帯に自爆していくコードを沢山みるようになったので、ケースとして日常風の記事にしてみました。 どんな風にハマってしまい、どうやって解決するのかが分かると思います。 結論 先に書いておきます。 Task.Run()を使ってはいけません Task.Result, Task.Wait()を使ってはいけません Threadクラスを使ってはいけません async-await構文だけを使って書きます async voidにするのは特殊な場合だけです がんばれー、わかってしまえば難しくない! 補足: もしあなたがJavaScriptで非同期処理を書いた事があるなら、その知識をそのまま生かせます。 JavaScriptではTaskの代わりにPromiseを使いますが、Promiseには上記1,2,3は存在しません。しかし、それで困ることはありません
HoloLensアドベントカレンダー2019の5日目の記事です。 HoloLens2を一般の方が入手するのは先になりそうなので、今できることとしてMRTKv2を用いてHoloLens1開発を進めていきたいなと思います。 今日は、MRTKv2のExamplesにあるHandInteractionExamplesと新しいシーンを作成して、豆腐(Cube)を表示してみましょう。 開発環境 HoloLens 1 Unity 2018.4.2f1 MRTK v2.0.0 Visual Studio 2017 (2019) Unity Hub 2.2.1 Unityプロジェクト作成 1.Unity Hubをインストールします 2.新規作成からテンプレートの「3D」を選択、プロジェクト名を入力し、作成をクリックします 3.Unityの画面が表示されたら完了です パッケージのインポート MRTKv2.0.
Microsoftは2020年11月10日(米国時間)、統合開発環境(IDE)の最新版「Visual Studio 2019 バージョン16.8」の一般提供を開始した。Git管理やC++対応、IntelliCode、.NET、XAML、Webツールなどに対して、多くの機能強化を施した。主な改良点は次の通り。 Git管理の生産性を向上 デフォルトのソース管理プロバイダーを、TFVC(Team Foundation Version Control)からGitへと変更した。[Git]メニューからリポジトリを作成、複製したり、開いたりできる。統合されたGitツールウィンドウを使って、コード変更のコミットやプッシュ、ブランチの管理、リモートリポジトリの最新状態の維持、マージの衝突の解決などができる。 C++20機能のサポートを強化 C++の次期標準である「C++20」対応も進んだ。「/std:c++
Building new functionality, writing unit tests, and learning new technologies has never been easier or more fun. TL;DR: Harnessing the wisdom of the community, Visual Studio IntelliCode is revolutionizing developer productivity. We started with AI-assisted IntelliSense and are now expanding the application of artificial intelligence to significantly accelerate learning, radically improve developme
ArrayPool<T>.Shared みなさんはSystem.Buffers.ArrayPool<T>.Shared使ってますか?使ってない?なら使いましょう。 ArrayPool<T>.Sharedは短期間だけ利用するようなバッファを貸してくれるものです。 new T[N]と違い、一度使った配列を使いまわすことができるのでガベージにならず、メモリ効率がよいです。 // Length = 20 以上のバッファを取得 byte[] array = ArrayPool<byte>.Shared.Rent(20); // 借りたバッファを返す ArrayPool<byte>.Shared.Return(array); ArrayPool<T>のミソは、長さ20を要求した時に20以上の長さの配列が返ってくるのは保証されてますが、長さ20の配列が来るとは限らない点。要求した以上の長さの配列が返って
はじめに Blazor が .NET Core 3.1 の頃に出てきて、Single Page Application を C# + HTML/CSS + ちょっとのJavaScript で作れる技術という立ち位置で .NET 5 頃までいました。 そこから Blazor Hybrid や .NET 8 で Blazor United という俗称で呼ばれる新しい Blazor の形が出てきました。 正直、のほほーんと外から Blazor を眺めているだけだと何が何だかわからない状態だと思うので、.NET 8 時点での Blazor の形を整理してみようと思います。今回は基本的に整理するだけで、実際にコードとしてどのように実装するのかといった所までは踏み込みません。個々の詳細についてはドキュメントなどを参照してください。 関連するドキュメントや私の記事などは、関係する説明の途中にリンクを貼っ
.NET 5 Preview 8 かららしいのですが、Windows 10 の API に .NET 5 からアクセスするのが凄く楽になってました。言及のある記事は以下になります。 Announcing .NET 5.0 Preview 8 Calling Windows APIs in .NET5 どれくらい簡単になったかというと、今回のこの記事がすぐ終ってしまうレベルで簡単です。すぐ終わると悲しいので、ちょっとだけ昔と比べてどれくらい簡単なのか?というのも書いておこうと思います。 昔 Windows 10 SDK の特定のフォルダにある DLL や winmd ファイルを手動で参照追加したうえで、配布時に含まれてほしくないファイルはコピーされないように手動で設定する。 そんなに数は多くないのですがめんどくさかったです。 今 Microsoft.Windows.SDK.Contracts
マイクロソフトは、C#のコードからWASIに対応したWebAssemblyバイナリの生成を.NET 8 SDKで可能にする実験的実装「wasi-experimental」が追加されたと、ブログ「Extending WebAssembly to the Cloud with .NET」で明らかにしました。 WebAssembly System Interface provides a way for WebAssembly code to call and implement arbitrary APIs, safely and across languages. ... and now, you can create WASI apps with #dotNET using the wasi-experimental workload in .NET 8. Learn more. http
前に ASP.NET Core で非同期と同期で3秒待ってレスポンス返すだけのプログラムを書いて Azure の Web Apps にデプロイして結果を見るという事をやりました。 今回は、これの ASP.NET 4.8 編になります。 デプロイした Web API 純粋に Thread.Sleep(3000); で待つものと await Task.Delay(3000); で待つものの二種類を作りました。ASP.NET 4.8 の Web API のテンプレートで出力される ValuesController の Get() メソッドに対して上記の2種類のコードを追加しています。 同期版 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.H
ちゃんとやったことなかった(存在は知ってた)ので覚書です。 ASP.NET Core で Controller を作ったけど、結合テストしないとなぁ…と思ってたけど、単体テストしてるしなぁめんどくさいなぁ…とも思ってたりしてたけど、便利な機能なのでやります!やりますよ。 テスト対象のプロジェクトの作成 ASP.NET Core の API のプロジェクトテンプレートを作成します。 認証は個別のユーザー アカウント(Azure AD B2C を使うやつ)を設定しました。 前はここにアプリ内でユーザー管理するやつがあった気がするけど…、変わったのかな? 今回はテスト用なので、ドメイン名やアプリケーション ID などは適当なものを入れました。 Entity Framework Core 系の以下のパッケージを追加して DB 操作のコードを追加します。 Microsoft.EntityFramew
念のため、依存関係→パッケージからEntityFramework、Identity、SQLServer、Toolsなどのパッケージがインストール済みか確認してください。 もしなければここまでの手順をやりなおすか、NuGetパッケージマネージャーからインストールしてください。 サンプルプロジェクトの実行 F5をクリック、もしくは「IIS Express」をクリックしてサンプルプロジェクトを実行してみます。 サンプルでは「Home」、「Counter」、「Fetch data」の3つのページが用意されています。 各ページについて詳述はしませんが、(実行時に少し時間がかかるものの)ページ切り替えやボタン操作が非同期でサクサク動くことがわかると思います。 ページ右上にあるRegister をクリックしてみてください。 ここでアカウントを登録することができます。Login と組み合わせてログインユー
この記事はクラスター Advent Calendar 2020の12日目の記事です。 昨日はclngnさんの「clusterのアバターサムネイルを変えた話」でした。影のこだわりはさすがですね。 はじめに みなさんこんにちは、スワンマンです。 普段はクラスターでイベントスタッフをやったり、イベントのMCをやったり、アバターの調整をしたり、スタジオの整備をしたり、Twitterの中の人をやったり…等々色んなことに携わっていますが、その中のメイン業務のひとつとしてカスタマーサポートもやっています。 今回はそのカスタマーサポートに寄せられた不具合の原因を自分で突き止めた時の話です。 原因不明のクラッシュが頻発…しない カスタマーサポートには日々不具合の報告が寄せられます。その中には自分だけで解決できるものもあればそうでないものもあり、そうでないものは開発チームへと送られます。 しかし開発チームのリ
My last post investigated ways to build a .NET Core desktop/console app with a web-rendered UI without bringing in the full weight of Electron. This seems to have interested a lot of people, so I decided to upgrade it to newer technologies and add cross-platform support. The result is a little NuGet package called WebWindow that you can add to any .NET Core console app. It can open a native OS win
dotnet-monitor is an experimental tool that makes it easier to get access to diagnostics information in a dotnet process. When running a dotnet application differences in diverse local and production environments can make collecting diagnostics artifacts (e.g., logs, traces, process dumps) challenging. dotnet-monitor aims to simplify the process by exposing a consistent REST API regardless of wher
先日のBuildで、Microsoftから突如「.NET Multi-platform App UI (MAUI)」がリリースされました。 ここではMAUIとは何か?Xamarin.Formsはどうなるの?ということを簡潔にまとめたいと思います。 さて2020年5月23日現在、MAUIに関する情報ソースとして最も信頼できそうなのは次の二つでしょう。たぶんね。 Introducing .NET Multi-platform App UI | .NET Blog GitHub - dotnet/maui: .NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop. MAUIとは何かと端的
.NET 6 ではプロジェクト テンプレートが更新されて、かなりシンプルになります。 例えば、コンソール アプリの場合(dotnet new console コマンドで生成)は(コメント行を除けば実質)以下の1行だけの C# ファイルが生成されます。 Console.WriteLine("Hello, World!"); 先日の .NET 6 Preview 7 から、コンソール アプリと Web アプリがこの新テンプレートになっています。 トラッキング issue を見るに、他のタイプのプロジェクトも同じ方針で書き換え中みたいです。 今日はこの新テンプレートがらみで、背景とか、内部挙動的な話とか、Preview 7 から正式リリースまでの間に掛かる予定の変更の話とか。 旧テンプレート まあ、これまでのテンプレートが以下のようなものでしたから、ずいぶんとすっきりしました。 using Sy
マイクロソフトの Visual Studio 公式チャンネルが GitHub Copilot (AI を活用した開発支援ツール) の Visual Studio 2022 への導入について 短い動画を(英語で)出していたので、 わたしは日本語版を出してみようと思い、 その前にテキストで要点をまとめておこうと思います。 GitHub Copilot、 VSCode で使っている人はよく見るのですが、 Visual Studio 2022 で使っている人はそこまでまだ見ていないので 広めたいなあ、と。 ちなみに、GitHub Copilot は有料ですが、個人プランは 30 日間の試用期間があります。 ↓ 値段(個人プランと ビジネスプラン(会社のポリシー適用などができる)で違います(ビジネスプランのほうが高い)) 元動画 公開日: 2023/07/04 タイトル: 『 Getting sta
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く