- ※適用バージョン:Windows 10 version 1709(build 16299)以降
お詫びと訂正(2019/3/12)
当初UWPアプリではWindows認証のみとしていましたが、読者からご指摘をいただき、UWPアプリでもSQLユーザー認証が利用可能だと判明しました。ここにお詫びするとともに、そのように記事を修正させていただきました。
はじめに
.NET Standardは、.NET FrameworkでPCL(Portable Class Library=移植可能なクラスライブラリ、MSDNでは「汎用性のあるクラス ライブラリ」と訳されることも)を作るための新しい規格です。 .NET Standard規格に準拠して作られたクラスライブラリは、その.NET Standard規格をサポートしている.NET Framework実装(プラットフォーム)の上で動作します。
2017年の後半になって、.NET Standard 2.0をサポートするプラットフォームが出揃いました。 Windowsのデスクトップ(WPF/Windows Forms)だけでなく、Mono(ASP.NET Core 2.0など)/Xamarin(Android/iOSなど)/UWP(Universal Windows Platform)でも、.NET Standard 2.0規格準拠のクラスライブラリが動くようになったのです。
ところで、UWPは(Windows 8.xのWindows Runtimeの時代から)ずっとADO.NETをサポートしてきませんでした。それが、.NET Standard 2.0のサポートにあわせて、ついにADO.NETも使えるようになったのです。
今回は、.NET Standard 2.0規格のクラスライブラリを作る方法と、そこでSQL Serverにアクセスするサンプルコードを紹介します。
対象読者
- .NET FrameworkでWindows用のアプリを作っている開発者
- .NET Framework互換プラットフォーム用のアプリを作っている開発者
- Xamarinアプリ(Xamarin.Forms/Xamarin.iOS/Xamarin.Android)を作っている開発者
- UWPアプリの開発者
必要な環境
サンプルコード(GitHub)のすべてを試してみるには以下の環境が必要です。
開発環境
- Windows 10 version 1709(build 16299)以降
- Visual Studio 2017 Version 15.5以降(無償のCommunity Editionで可)
- UWP用Windows 10 SDK:C#/VB用の10.0.16299以降
- .NET Core 2.0 開発ツール(SDK)
- Xamarin.Forms 2.5.0以降
実行に必要な環境
- SQL Server(TCP/IP経由でSQL Serverのユーザー認証が使えるように設定が必要)
- Northwindサンプル データベース(SQL Server上にご用意ください)
- Active Directoryドメイン(Windows認証を使う場合に必要)
- ドメインに参加しているPC(Windows認証を使う場合に必要)
どんな機能なのか?
サンプルコード中のUWPアプリを実行している画面を次に示します。
UWPアプリで、SQL Serverからデータを取得して表示しています。そのデータ取得ロジックは.NET Standard 2.0規格のクラスライブラリ(⇒UF03StdLib)にまとめられていて、ADO.NETを使ってSQL ServerのNorthwindサンプルデータベースからCategoryテーブルの全レコードをセレクトしています。
そして、上と同じクラスライブラリを利用して、Windows Forms/WPF/Xamarin.Forms(Android/UWP)の各アプリも動きました(次からの4画像)。ASP.NET Core 2.0やXamarinのiOSは試していませんが、同様に動作するはずです。
このように、1つのクラスライブラリを.NET Standard 2.0規格で書くだけで、たくさんの最新プラットフォームのアプリから利用できるのです。
.NET Standard 2.0規格クラスライブラリの作り方/使い方
.NET Standard 2.0規格に準拠した移植可能なクラスライブラリの作り方と、それを使うアプリの作り方を説明します。Visual Studio 2017の最新版を使っていれば、特に苦労することはありません。
.NET Standard 2.0規格クラスライブラリを作るには?
Visual Studio 2017(version 15.3以降)でプロジェクトを追加するときに、[クラス ライブラリ (.NET Standard)]を選ぶだけです(次の画像)。
このとき、[新しいプロジェクトの追加]ダイアログの上部にある.NET Frameworkのバージョン選択ドロップダウン(上の画像では4.7になっています)は無視され、.NET Standard 2.0規格になります。2.0以前のバージョンにするには、プロジェクトを作成してからプロジェクトのプロパティページで変更します。
プロジェクト作成直後にソリューションエクスプローラーを見ると、プロジェクトの[依存関係]に警告マークが付いていることがあります(次の画像)。これは、プロジェクトを一度ビルドすれば解消するはずです。ビルドしても失敗する場合は、インターネットからNuGetパッケージを取得できる環境になっているか、また、プロジェクトを配置したパスの途中に '$' や '@' といった記号が含まれていないか、チェックしてみてください。
.NET Standard 2.0規格でコーディングに使えるAPIの一覧は、.NET APIブラウザの「.NET Standard API リファレンス version 2.0」に掲載されています。APIのリストは、GitHubの .NET Standard 2.0にも載っています(こちらはシグネチャだけ)。また、検索してdocs.microsoft.comのAPI解説ページにたどり着いたときは、ページの一番下に "Applies to" として利用可能なバージョンが記載されています(旧MSDNの解説ページには.NET Standardの記述がないようです)。
.NET Standard 2.0規格クラスライブラリを使うには?
上のようにして作ったクラスライブラリを使う側のプロジェクトも、.NET Standard 2.0規格をサポートしていなければなりません。サポートしているなら、使いたい.NET Standard 2.0規格クラスライブラリ(プロジェクトまたはバイナリファイル)への参照をプロジェクトに追加するだけです。
従来のデスクトップアプリ(Windows Forms/WPF)
Visual Studio 2017(Version 15.3以降)のインストーラーで、[.NET デスクトップ開発]ワークロードとともにオプションの[.NET Core 2.0 開発ツール]を入れておきます。Windows Forms/WPFのプロジェクトを作るときに、.NET Framework 4.6.1以降を指定します。
Xamarin.Forms
Visual Studio 2017(Version 15.5以降)でXamarin.Formsプロジェクトを作るときに次の画像のようなダイアログが出てきます。その[Code Sharing Strategy]セクション(赤枠内)で[.NET Standard]を選びます。
Version 15.4までのVisual Studio 2017では上記のダイアログが出てきませんので、手作業で対応することになります。詳しくは田淵義人さんのブログ記事「Xamarin で使う .NET Standard ライブラリ/PCL(Portable Class Library)/Shared Project について」などをご覧ください。
UWPアプリ
Visual Studio 2017(Version 15.4以降)でUWPアプリのプロジェクトを作ると次の画像のようなダイアログが出てきます。下側の[最小バージョン]ドロップダウンで[ビルド 16299](またはそれ以上)を選びます。