modern .net

29
Modern .NET C# とととと15 とと とととと ++C++; // 未未未未未 C

Upload: -

Post on 18-Aug-2015

196 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Modern .NET

Modern .NET

C# とともに祝 15 周年岩永信之

++C++; // 未確認飛行 C

Page 2: Modern .NET

Modern .NET

• .NET 2015 と呼ばれてる一連の製品既存技術系 2015 世代系

.NET .NET Framework 4.6

.NET Core 5• ASP.NET 5• "Modern" PCL‡

• UWP†

プロジェクト形式 csproj/vbproj xproj

パッケージ参照 package.config project.json(NuGet v3)

ターゲットバージョン

net45, netcore45, MonoAndroid10, ...

dotnet

beta

RTM

beta

† Portable Class Library‡ Universal Windows Platform

beta

beta

RTM

beta

• .NET Core とか ASP.NET 5 はまだベータ• 全部ベータだと思ってたら一部 RTM だった たぶん

Page 3: Modern .NET

今日話すこと

既存技術系 2015 世代系.NET .NET Framework

4.6.NET Core 5• ASP.NET 5• "Modern" PCL‡

• UWP†

プロジェクト形式 csproj/vbproj xproj

パッケージ参照 package.config project.json(NuGet v3)

ターゲットバージョン

net45, netcore45, MonoAndroid10, ...

dotnet

beta

RTM

beta

† Portable Class Library‡ Universal Windows Platform

beta

beta

RTM

beta

• 何が RTM で何がベータかわかるように• RTM な部分を少し詳細に説明

• .NET 2015 と呼ばれてる一連の製品

Page 4: Modern .NET

リリース状況• .NET 2015 と呼ばれてる一連の製品

既存技術系 2015 世代系.NET .NET Framework

4.6.NET Core 5• ASP.NET 5• "Modern" PCL‡

• UWP†

プロジェクト形式 csproj/vbproj xproj

パッケージ参照 package.config project.json(NuGet v3)

ターゲットバージョン

net45, netcore45, MonoAndroid10, ...

dotnet

beta

RTM

beta

† Portable Class Library‡ Universal Windows Platform

beta

beta

RTM

beta

赤枠Visual Studio 2015 を入れるとベータ版テンプレートが入ってる

青枠Visual Studio Tools for Windows を入れると RTM テンプレートが入って

Page 5: Modern .NET

.NET Core

• .NET Framework を再実装• オープンソース• クロスプラットフォーム• modular

• 秋以降に RTM しそう?• 今のところ 63% くらいっぽい†

beta

要するに• Win32 依存部分の切り離し• mscorlib の分解• 長期保守に耐えうる造りに変更

† https://github.com/dotnet/corefx-progress

Page 6: Modern .NET

CoreCLR と CoreFX

• 「 .NET 」って言葉が含む 2 つの意味

GitHub リポジトリ的にも別れてたり

ランタイム 標準ライブラリ何ものか • IL を JIT して実行

• GC とかの実行時処理• 規約 ( どのクラスをどの

プラットフォームで使えるか )• その実装

.NET Core CoreCLR† CoreFX‡beta beta

† https://github.com/dotnet/coreclr‡ https://github.com/dotnet/corefx

GitHub リポジトリ的にも別れてたり

• 規約的には Windows ストア アプリ向け .NET と同系統• 実装は新規 (mscorlib を分解 + クロスプラットフォーム

化 )

同世代の別技術に.NET Native あり

RTM

Page 7: Modern .NET

Modular アーキテクチャCollection

sThreading

Reflection

Linq

Net

IO …

Modern(.NET Core)

Legacy(.NET Framework) mscorlib※

※ 正確にはいくつかのクラスは System.dll とかに分かれてるけど、それでもかなりでかい単位

• 機能単位でアセンブリを分割• 必要な時に必要な分だけ参照

して使う• 標準ライブラリも個別・

NuGet 配布

beta

既存• インストーラーで一括インス

トール

Page 8: Modern .NET

Modular アーキテクチャ ( 移行期があった )

Collections

Threading

Reflection

Linq

Net

IO …

Modern(.NET Core)

Legacy(.NET 4 まで ) mscorlib

Collections

Threading

Reflection

Linq

Net

IO …

Facades(.NET 4.5, Win8)

mscorlib

実体はこれまでの mscorlib のバージョン アップ

Fasade( 見せかけ ) アセンブリ

型の「転送」だけする本当は mscorlib で実装してるものを個別のライブラリに実装しているように見せる

beta

既存

既存

転送

( 移行期 )

(.NET 4.6 と ) 互換

Page 9: Modern .NET

互換性• ランタイムに関して• 仕様は一緒で別実装

• 標準ライブラリの規約に関して• Facades がある※ /.NET 4.5 時代から Facades を用意してた

Core 機能版 Full 機能版

Windows 8 世代 ストア アプリ .NET Framework 4.5

Windows 10 世代 .NET Core 5UWP†

.NET Framework 4.6

おおむね上位互換 (Full = Core + Win32)

バージョンアップ

RTMbeta

既存既存

RTM互換

†Universal Windows Platform

※ NuGet v3 は mscorlib への転送を自動的にやってくれるみたい

Page 10: Modern .NET

.NET Core 系プロジェクト• ASP.NET 5

• "Modern PCL"

• Universal Windows Platform (UWP)

beta

RTM

beta

.NET Core

.NET Framework※ 両対応

• デバッグ時には CoreCLR 上で普通に実行

• 配布前に .NET Native でネイティブ化• 標準ライブラリ規約的には .NET Core

.NET Core 規約で

作っておけばどこでも動く

※ 現時点では ( たぶん今後も ) .NET Framework 4.5 以降のみ

RTM

beta

Page 11: Modern .NET

xproj

• xproj: プロジェクトの新しいファイル形式• XML でソースコード管理するのやめました• 基本、フォルダー以下にある全ソースコードがビルド対象• 除外したいものは、 project.json の中に除外設定を書く

• ASP.NET 5 と Modern PCL はこれ

• csproj/vbproj• ビルド対象にしたい .cs/.vb ソースコードや、アセンブリ参照設定を

1 つ 1 つ XML で記述

beta

beta beta

既存

Page 12: Modern .NET

project.json (xproj 系 )

• xproj はほぼ空• プロジェクト設定は project.json に書く• これまで nuspec に書いてたようなパッケージ情報• 依存するライブラリの情報

• これを使えるプロジェクトのタイプ• ASP.NET 5

• Modern PCL

beta

beta

beta

Page 13: Modern .NET

project.json (NuGet v3)

• csproj/vbproj でも project.json を使うように• xproj での project.json のサブセット

• 依存ライブラリに関する情報だけ• package.config (NuGet v2 まで ) の置き換え

• これを使えるプロジェクトのタイプ• UWP• ( 未保証でよければ ) その他なんでも

• プロジェクト テンプレートにはなってなくて手動で package.config を project.json に差し替えたら動く( 要プロジェクト再読み込み )

RTM

RTM

既存

Page 14: Modern .NET

project.json (NuGet v3) の中身• csproj 中で動かす

最低ラインの書き方• runtimes とかを抜くと

意味不明のビルド エラーが発生

{ "frameworks": { "net35": {} }, "runtimes": { "win": {}, "win-anycpu": {} }, "dependencies": { "Newtonsoft.Json": "7.0.1" }}

ターゲット フレームワーク

ターゲット OS 、 CPU

依存ライブラリ一覧を" パッケージ名 ": " バージョン

"という形式で並べる

Page 15: Modern .NET

NuGet v3 でのパッケージ管理 ( 参照側 )

• JSON (project.json) で管理するようになった• ソリューション単位でのキャッシュ管理をやめた• 旧 : ソリューションの下に「 packages 」フォルダー• 新 : ユーザー フォルダーの下に「 .nuget/packages 」フォルダー

• csproj/vbproj汚染しなくなった• hint path とかもなくなって、 1 つのプロジェクトを複数のソリューションから参照してもパスが狂って困る問題なくなった

•多段の依存管理が楽になった• 直接参照しているものだけが project.json に入る• アンインストールやアップグレード作業がだいぶ楽

Page 16: Modern .NET

NuGet v3 でのパッケージ管理 ( 作成側 )

• install/uninstall.ps1 が働かなくなった• プロジェクト単位でインストールされない• init.ps1 は動く

• コンテンツ (contents フォルダー ) を持てない• analyzers フォルダーに DLL 入れるだけでアナライザーの参照

できるように

Page 17: Modern .NET

"dotnet" ターゲット• 今まで : ターゲットごとに「プロファイル」が分かれてた• デスクトップ向けなら net35, net45, net46, ...• ストア アプリ向けなら wp7, wp71, win8, win81, netcore45, ...• Xamarin 向けなら MonoTouch10, MonoAndroid10, ...

• 新世代 : "dotnet" 1 個だけに!• 「どのライブラリに依存してるか」だけで、どのターゲットで動くか

を自動判別• ターゲットを気にして作るのは、標準ライブラリとか Xamarin みた

いなものだけ

RTM ※

※ dotnet ターゲット (NuGet v3 が必要 ) が使えて、 RTM かつ保証があるのは現状では UWP だけ未保証・ベータ込みでも、 .NET Framework 4.6/.NET Core 5 以降のみ

Page 18: Modern .NET

"Modern PCL"

• xproj なライブラリ プロジェクト• 自動的に dotnet ターゲットな nupkg を作ってくれる

このテンプレートが Modern PCL

beta

Page 19: Modern .NET

新旧世代• 同世代技術・新技術の方がサポート早いのは当然• 世代的には .NET Core = xproj = project.json = dotnet ターゲッ

ト• 混同されがち (ひとくくりに .NET 2015 とか .NET vNext とか )

• でも、いくらか新旧混在可能• .NET Core/.NET Framework共用

• Facades がある• xproj で作ったアプリや、 dotnet ターゲットのライブラリは

.NET Framework 4.6/.NET Core 5 両対応• NuGet v3 で、 project.json を csproj/vbproj からも使える

Page 20: Modern .NET

まとめ• 新旧はっきりわかれてるけど、いくらか混在利用可能• .NET Framework ⇔ .NET Core

• ASP.NET 5, "Modern PCL", UWP

• csproj/vbproj ⇔ xproj• package.config ⇔ project.json (NuGet v3)• net45, win81, ... ⇔ dotnet

• ぶっちゃけていうと• 新しい方が使えると結構幸せ• 移行期に当たる今はたぶん余計に苦労する• UWP に合わせて NuGet v3 だけ前倒しで RTM した雰囲気

RTM

RTM

Page 21: Modern .NET

RTM 状況、実はよくわからずここからおまけ

Page 22: Modern .NET

ASP.NET 系• xproj 系プロジェクト = ASP.NET 5 系チームによる開発

「 Web 」カテゴリー内に「コンソール アプリ」って何なんだよ

xproj

xproj

xproj

beta

beta

beta

Page 23: Modern .NET

「プレビュー」の文字• ASP.NET 5 は、プレビューのところにプレビューの文字あり

「プレビュー」とは書かれてないけども

さっきの

Page 24: Modern .NET

やっぱり「 beta 」って入ってる• DNX SDK バージョン

作成

プロパティ

「プレビュー」とは書かれてないけども やっぱベータなの?

Page 25: Modern .NET

ASP.NET 系 → UWP 系• project.json = ASP.NET 系 → UWP 系

ASP.NET 5xproj

beta UWPcsproj

RTM

xproj では、プロジェクト設定全般を書く

だから「 project.json 」

サブセット

パッケージ依存管理だけを project.json に書く

• VS Tools for Windows• VS2015 RTM (7/20) よりも

後 (7/29) にリリース• csproj+project.json を使うに

はこれが必須

• UWP 用 ?

Page 26: Modern .NET

csproj+project.json は UWP 系 (1)

•任意のプロジェクト タイプに対する project.json

手作業で• packages.config削除• project.json追加• プロジェクトをリロード

csprojpackages.config

既存 csprojproject.json

RTM ?

UWP 以外であっても、 VS Tools for Windows のインストールが必須

手作業必須なのは、• 単に UWP 以外の対応が間に合って

ないのか ?• まだやって欲しくないから

テンプレートを用意してないのか ?

Page 27: Modern .NET

csproj+project.json は UWP 系 (2)

• project.json からのパッケージの復元

• csproj+project.json なプロジェクトのビルド

NuGet パッケージ マネージャーを 3.1 以上にすればできる

VS Tools for Windows が必要(UWP 以外のプロジェクト タイプであっても )( 同時に NuGet の方も更新されてた )

(7/31 にリリースしてた )

(7/29 にリリース )

Page 28: Modern .NET

.NET Core はベータ (1)

• CoreCLR にも CoreFX にも「 beta 」の文字

Page 29: Modern .NET

.NET Core はベータ (2)

• UWP は RTM

.NET Core

CoreCLR.NET

Native

ASP.NET 5 UWP

beta

beta

わかる

CoreFXbeta

.NET Framework 4.6

選べる

RTM

RTM

Debug Release

RTM

依存先がベータ?!