SlideShare a Scribd company logo
Modern .NET
C# とともに祝15周年
岩永信之
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だった たぶん
今日話すこと
既存技術系 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と呼ばれてる一連の製品
リリース状況
• .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テンプレートが入ってる
.NET Core
• .NET Frameworkを再実装
• オープンソース
• クロスプラットフォーム
• modular
• 秋以降にRTMしそう?
• 今のところ63%くらいっぽい†
beta
要するに
• Win32依存部分の切り離し
• mscorlibの分解
• 長期保守に耐えうる造りに変更
† https://github.com/dotnet/corefx-progress
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
Modularアーキテクチャ
Collections
Threading
Reflection
Linq
Net
IO …
Modern
(.NET Core)
Legacy
(.NET Framework) mscorlib※
※正確にはいくつかのクラスはSystem.dllとかに分かれてるけど、それでもかなりでかい単位
• 機能単位でアセンブリを分割
• 必要な時に必要な分だけ参照
して使う
• 標準ライブラリも個別・
NuGet配布
beta
既存
• インストーラーで一括インス
トール
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と)互換
互換性
• ランタイムに関して
• 仕様は一緒で別実装
• 標準ライブラリの規約に関して
• Facadesがある※/.NET 4.5時代からFacadesを用意してた
Core機能版 Full機能版
Windows 8世代 ストア アプリ .NET Framework 4.5
Windows 10世代 .NET Core 5
UWP†
.NET Framework 4.6
おおむね上位互換 (Full = Core + Win32)
バージョン
アップ
RTM
beta
既存
既存
RTM互換
†Universal Windows Platform
※ NuGet v3はmscorlibへの転送を自動的にやってくれるみたい
.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
xproj
• xproj: プロジェクトの新しいファイル形式
• XMLでソースコード管理するのやめました
• 基本、フォルダー以下にある全ソースコードがビルド対象
• 除外したいものは、project.jsonの中に除外設定を書く
• ASP.NET 5とModern PCLはこれ
• csproj/vbproj
• ビルド対象にしたい.cs/.vbソースコードや、アセンブリ参照設定を
1つ1つXMLで記述
beta
beta beta
既存
project.json (xproj系)
• xprojはほぼ空
• プロジェクト設定はproject.jsonに書く
• これまでnuspecに書いてたようなパッケージ情報
• 依存するライブラリの情報
• これを使えるプロジェクトのタイプ
• ASP.NET 5
• Modern PCL
beta
beta
beta
project.json (NuGet v3)
• csproj/vbprojでもproject.jsonを使うように
• xprojでのproject.jsonのサブセット
• 依存ライブラリに関する情報だけ
• package.config (NuGet v2まで) の置き換え
• これを使えるプロジェクトのタイプ
• UWP
• (未保証でよければ)その他なんでも
• プロジェクト テンプレートにはなってなくて
手動でpackage.configをproject.jsonに差し替えたら動く
(要プロジェクト再読み込み)
RTM
RTM
既存
project.json (NuGet v3)の中身
• csproj中で動かす
最低ラインの書き方
• runtimesとかを抜くと
意味不明のビルド エラー
が発生
{
"frameworks": {
"net35": {}
},
"runtimes": {
"win": {},
"win-anycpu": {}
},
"dependencies": {
"Newtonsoft.Json": "7.0.1"
}
}
ターゲット フレームワーク
ターゲットOS、CPU
依存ライブラリ一覧を
"パッケージ名": "バージョン"
という形式で並べる
NuGet v3でのパッケージ管理(参照側)
• JSON (project.json)で管理するようになった
• ソリューション単位でのキャッシュ管理をやめた
• 旧: ソリューションの下に「packages」フォルダー
• 新: ユーザー フォルダーの下に「.nuget/packages」フォルダー
• csproj/vbproj汚染しなくなった
• hint pathとかもなくなって、1つのプロジェクトを複数のソリューショ
ンから参照してもパスが狂って困る問題なくなった
• 多段の依存管理が楽になった
• 直接参照しているものだけがproject.jsonに入る
• アンインストールやアップグレード作業がだいぶ楽
NuGet v3でのパッケージ管理(作成側)
• install/uninstall.ps1が働かなくなった
• プロジェクト単位でインストールされない
• init.ps1は動く
• コンテンツ(contentsフォルダー)を持てない
• analyzersフォルダーにDLL入れるだけでアナライザーの参照でき
るように
"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以降のみ
"Modern PCL"
• xprojなライブラリ プロジェクト
• 自動的にdotnetターゲットなnupkgを作ってくれる
このテンプレートがModern PCL
beta
新旧世代
• 同世代技術・新技術の方がサポート早いのは当然
• 世代的には .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からも使える
まとめ
• 新旧はっきりわかれてるけど、いくらか混在利用可能
• .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
RTM状況、実はよくわからず
ここからおまけ
ASP.NET系
• xproj系プロジェクト = ASP.NET 5系チームによる開発
「Web」カテゴリー内に
「コンソール アプリ」って何なんだよ
xproj
xproj
xproj
beta
beta
beta
「プレビュー」の文字
• ASP.NET 5は、プレビューのところにプレビューの文字あり
「プレビュー」とは
書かれてないけども
さっきの
やっぱり「beta」って入ってる
• DNX SDKバージョン
作成
プロパティ
「プレビュー」とは
書かれてないけども やっぱベータなの?
ASP.NET系 → UWP系
• project.json = ASP.NET系 → UWP系
ASP.NET 5
xproj
beta UWP
csproj
RTM
xprojでは、プロジェクト
設定全般を書く
だから「project.json」
サブセット
パッケージ依存管理だけ
をproject.jsonに書く
• VS Tools for Windows
• VS2015 RTM (7/20)よりも
後(7/29)にリリース
• csproj+project.jsonを使うには
これが必須
• UWP用?
csproj+project.jsonはUWP系(1)
• 任意のプロジェクト タイプに対するproject.json
手作業で
• packages.config削除
• project.json追加
• プロジェクトをリロード
csproj
packages.config
既存
csproj
project.json
RTM ?
UWP以外であっても、VS Tools for
Windowsのインストールが必須
手作業必須なのは、
• 単にUWP以外の対応が間に合ってな
いのか?
• まだやって欲しくないから
テンプレートを用意してないのか?
csproj+project.jsonはUWP系(2)
• project.jsonからのパッケージの復元
• csproj+project.jsonなプロジェクトのビルド
NuGetパッケージ マネージャーを3.1以上にすればできる
VS Tools for Windowsが必要
(UWP以外のプロジェクト タイプであっても)
(同時にNuGetの方も更新されてた)
(7/31にリリースしてた)
(7/29にリリース)
.NET Coreはベータ(1)
• CoreCLRにもCoreFXにも「beta」の文字
.NET Coreはベータ(2)
• UWPはRTM
.NET Core
CoreCLR .NET Native
ASP.NET 5 UWP
beta
beta
わかる
CoreFX
beta
.NET Framework 4.6
選べる
RTM
RTM
Debug Release
RTM
依存先がベータ?!

More Related Content

PPTX
今から始める、Windows 10&新.NETへの移行戦略
PPTX
C# design note sep 2014
PPTX
.NET vNext
PPTX
Net fringejp2016
PPTX
Unityで使える C# 6.0~と .NET 4.6
PPTX
Deep Dive C# 6.0
PPTX
dotnetconfJP2017_netcore2
PPTX
C# 8.0 非同期ストリーム
今から始める、Windows 10&新.NETへの移行戦略
C# design note sep 2014
.NET vNext
Net fringejp2016
Unityで使える C# 6.0~と .NET 4.6
Deep Dive C# 6.0
dotnetconfJP2017_netcore2
C# 8.0 非同期ストリーム

What's hot (20)

PDF
Bluetoothでgo!
PPTX
広がる .Net
PPTX
C#/.NETがやっていること 第二版
PPTX
C#言語機能の作り方
PDF
.NET Coreから概観する.NETのOSSへの取り組み
PPTX
.NET Core 2.x 時代の C#
PPTX
.NET Core とマルチプラットフォーム
PPTX
Orange Cube 自社フレームワーク 2015/3
PDF
今日からできる!簡単 .NET 高速化 Tips
PDF
基礎からのCode Contracts
PDF
Pythonで始めるWebアプリケーション開発
PDF
JavaScript Tips 2015(PDF 版)
PPTX
Golang tokyo #7 qtpm
PDF
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
PDF
SignalRブートキャンプ
PPTX
(ゲームじゃない方の)switchで遊びたい話
PPTX
C#の書き方
PDF
.NET Core時代のCI/CD
PDF
動的なILの生成と編集
PDF
20201127 .NET 5
Bluetoothでgo!
広がる .Net
C#/.NETがやっていること 第二版
C#言語機能の作り方
.NET Coreから概観する.NETのOSSへの取り組み
.NET Core 2.x 時代の C#
.NET Core とマルチプラットフォーム
Orange Cube 自社フレームワーク 2015/3
今日からできる!簡単 .NET 高速化 Tips
基礎からのCode Contracts
Pythonで始めるWebアプリケーション開発
JavaScript Tips 2015(PDF 版)
Golang tokyo #7 qtpm
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
SignalRブートキャンプ
(ゲームじゃない方の)switchで遊びたい話
C#の書き方
.NET Core時代のCI/CD
動的なILの生成と編集
20201127 .NET 5
Ad

Viewers also liked (20)

PPTX
それっぽく、適当に
PPTX
Code Contracts in .NET 4
PPTX
.NET Compiler Platform
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PPTX
C#や.NET Frameworkがやっていること
PDF
Rust 1.0 Release記念祝賀 - Rustのドキュメントを少し訳してみた
PDF
Friendly
PDF
Universal Appとは? -デバイスに依存しないアプリケーション開発-
PDF
Async History in .NET
PDF
WPF Interoperability
PPTX
Msgpack cli-tech-aid-2013
PDF
DeclarativeSql
PDF
Sevens Algorithm
PDF
酒の肴はC# vNext
PDF
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
PPTX
Coding Interview
PDF
Rust v1.0 release celebration party
PDF
How to make the Fastest C# Serializer, In the case of ZeroFormatter
PPTX
Keep yourself up to date
PPTX
Overview of the .Net Collection Framework and Immutable Collections
それっぽく、適当に
Code Contracts in .NET 4
.NET Compiler Platform
今から始める、Windows 10&新.NETへの移行戦略
C#や.NET Frameworkがやっていること
Rust 1.0 Release記念祝賀 - Rustのドキュメントを少し訳してみた
Friendly
Universal Appとは? -デバイスに依存しないアプリケーション開発-
Async History in .NET
WPF Interoperability
Msgpack cli-tech-aid-2013
DeclarativeSql
Sevens Algorithm
酒の肴はC# vNext
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
Coding Interview
Rust v1.0 release celebration party
How to make the Fastest C# Serializer, In the case of ZeroFormatter
Keep yourself up to date
Overview of the .Net Collection Framework and Immutable Collections
Ad

Similar to Modern .NET (20)

PDF
Dotnetcore30forwindesktop
PPTX
20170311 Developing & Deploying .NET Core on Linux
PPTX
Dot netcore multiplatform 2
PPTX
About .Net vNext
PPTX
About .Net vNext
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
PDF
ソフトウェア工学2023 14 ビルド
PDF
How to run P4 BMv2
PDF
【BS2】.NET 6 最新アップデート
KEY
Composer による依存管理 と Packagist によるライブラリの公開
PPTX
Grunt入門
PDF
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
PDF
.NET Coreとツール類の今
PPT
170622 02
PDF
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
PDF
Visual Studioで始めるTypeScript開発入門
PDF
改めて C# でできることを振り返る
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
PPTX
Ossで作成するチーム開発環境
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Dotnetcore30forwindesktop
20170311 Developing & Deploying .NET Core on Linux
Dot netcore multiplatform 2
About .Net vNext
About .Net vNext
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
ソフトウェア工学2023 14 ビルド
How to run P4 BMv2
【BS2】.NET 6 最新アップデート
Composer による依存管理 と Packagist によるライブラリの公開
Grunt入門
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
.NET Coreとツール類の今
170622 02
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Visual Studioで始めるTypeScript開発入門
改めて C# でできることを振り返る
はてなにおける継続的デプロイメントの現状と Docker の導入
Ossで作成するチーム開発環境
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021

More from 信之 岩永 (13)

PPTX
YouTube ライブ配信するようになった話
PPTX
C# 9.0 / .NET 5.0
PPTX
C# コンパイラーの書き換え作業の話
PPTX
Unicode文字列処理
PPTX
C# 8.0 null許容参照型
PPTX
C# 8.0 Preview in Visual Studio 2019 (16.0)
PPTX
async/await のしくみ
PPTX
C# 7.2 with .NET Core 2.1
PPTX
非同期処理の基礎
PPTX
C#とILとネイティブと
PPTX
プログラミング .NET Framework 第4版
PPTX
Anders Hejlsberg Q & A
PPTX
C#マスコット(公開用)
YouTube ライブ配信するようになった話
C# 9.0 / .NET 5.0
C# コンパイラーの書き換え作業の話
Unicode文字列処理
C# 8.0 null許容参照型
C# 8.0 Preview in Visual Studio 2019 (16.0)
async/await のしくみ
C# 7.2 with .NET Core 2.1
非同期処理の基礎
C#とILとネイティブと
プログラミング .NET Framework 第4版
Anders Hejlsberg Q & A
C#マスコット(公開用)

Modern .NET

  • 2. 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だった たぶん
  • 3. 今日話すこと 既存技術系 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と呼ばれてる一連の製品
  • 4. リリース状況 • .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テンプレートが入ってる
  • 5. .NET Core • .NET Frameworkを再実装 • オープンソース • クロスプラットフォーム • modular • 秋以降にRTMしそう? • 今のところ63%くらいっぽい† beta 要するに • Win32依存部分の切り離し • mscorlibの分解 • 長期保守に耐えうる造りに変更 † https://github.com/dotnet/corefx-progress
  • 6. 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
  • 7. Modularアーキテクチャ Collections Threading Reflection Linq Net IO … Modern (.NET Core) Legacy (.NET Framework) mscorlib※ ※正確にはいくつかのクラスはSystem.dllとかに分かれてるけど、それでもかなりでかい単位 • 機能単位でアセンブリを分割 • 必要な時に必要な分だけ参照 して使う • 標準ライブラリも個別・ NuGet配布 beta 既存 • インストーラーで一括インス トール
  • 8. 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と)互換
  • 9. 互換性 • ランタイムに関して • 仕様は一緒で別実装 • 標準ライブラリの規約に関して • Facadesがある※/.NET 4.5時代からFacadesを用意してた Core機能版 Full機能版 Windows 8世代 ストア アプリ .NET Framework 4.5 Windows 10世代 .NET Core 5 UWP† .NET Framework 4.6 おおむね上位互換 (Full = Core + Win32) バージョン アップ RTM beta 既存 既存 RTM互換 †Universal Windows Platform ※ NuGet v3はmscorlibへの転送を自動的にやってくれるみたい
  • 10. .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
  • 11. xproj • xproj: プロジェクトの新しいファイル形式 • XMLでソースコード管理するのやめました • 基本、フォルダー以下にある全ソースコードがビルド対象 • 除外したいものは、project.jsonの中に除外設定を書く • ASP.NET 5とModern PCLはこれ • csproj/vbproj • ビルド対象にしたい.cs/.vbソースコードや、アセンブリ参照設定を 1つ1つXMLで記述 beta beta beta 既存
  • 12. project.json (xproj系) • xprojはほぼ空 • プロジェクト設定はproject.jsonに書く • これまでnuspecに書いてたようなパッケージ情報 • 依存するライブラリの情報 • これを使えるプロジェクトのタイプ • ASP.NET 5 • Modern PCL beta beta beta
  • 13. project.json (NuGet v3) • csproj/vbprojでもproject.jsonを使うように • xprojでのproject.jsonのサブセット • 依存ライブラリに関する情報だけ • package.config (NuGet v2まで) の置き換え • これを使えるプロジェクトのタイプ • UWP • (未保証でよければ)その他なんでも • プロジェクト テンプレートにはなってなくて 手動でpackage.configをproject.jsonに差し替えたら動く (要プロジェクト再読み込み) RTM RTM 既存
  • 14. project.json (NuGet v3)の中身 • csproj中で動かす 最低ラインの書き方 • runtimesとかを抜くと 意味不明のビルド エラー が発生 { "frameworks": { "net35": {} }, "runtimes": { "win": {}, "win-anycpu": {} }, "dependencies": { "Newtonsoft.Json": "7.0.1" } } ターゲット フレームワーク ターゲットOS、CPU 依存ライブラリ一覧を "パッケージ名": "バージョン" という形式で並べる
  • 15. NuGet v3でのパッケージ管理(参照側) • JSON (project.json)で管理するようになった • ソリューション単位でのキャッシュ管理をやめた • 旧: ソリューションの下に「packages」フォルダー • 新: ユーザー フォルダーの下に「.nuget/packages」フォルダー • csproj/vbproj汚染しなくなった • hint pathとかもなくなって、1つのプロジェクトを複数のソリューショ ンから参照してもパスが狂って困る問題なくなった • 多段の依存管理が楽になった • 直接参照しているものだけがproject.jsonに入る • アンインストールやアップグレード作業がだいぶ楽
  • 16. NuGet v3でのパッケージ管理(作成側) • install/uninstall.ps1が働かなくなった • プロジェクト単位でインストールされない • init.ps1は動く • コンテンツ(contentsフォルダー)を持てない • analyzersフォルダーにDLL入れるだけでアナライザーの参照でき るように
  • 17. "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以降のみ
  • 18. "Modern PCL" • xprojなライブラリ プロジェクト • 自動的にdotnetターゲットなnupkgを作ってくれる このテンプレートがModern PCL beta
  • 19. 新旧世代 • 同世代技術・新技術の方がサポート早いのは当然 • 世代的には .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からも使える
  • 20. まとめ • 新旧はっきりわかれてるけど、いくらか混在利用可能 • .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
  • 22. ASP.NET系 • xproj系プロジェクト = ASP.NET 5系チームによる開発 「Web」カテゴリー内に 「コンソール アプリ」って何なんだよ xproj xproj xproj beta beta beta
  • 25. ASP.NET系 → UWP系 • project.json = ASP.NET系 → UWP系 ASP.NET 5 xproj beta UWP csproj RTM xprojでは、プロジェクト 設定全般を書く だから「project.json」 サブセット パッケージ依存管理だけ をproject.jsonに書く • VS Tools for Windows • VS2015 RTM (7/20)よりも 後(7/29)にリリース • csproj+project.jsonを使うには これが必須 • UWP用?
  • 26. csproj+project.jsonはUWP系(1) • 任意のプロジェクト タイプに対するproject.json 手作業で • packages.config削除 • project.json追加 • プロジェクトをリロード csproj packages.config 既存 csproj project.json RTM ? UWP以外であっても、VS Tools for Windowsのインストールが必須 手作業必須なのは、 • 単にUWP以外の対応が間に合ってな いのか? • まだやって欲しくないから テンプレートを用意してないのか?
  • 27. csproj+project.jsonはUWP系(2) • project.jsonからのパッケージの復元 • csproj+project.jsonなプロジェクトのビルド NuGetパッケージ マネージャーを3.1以上にすればできる VS Tools for Windowsが必要 (UWP以外のプロジェクト タイプであっても) (同時にNuGetの方も更新されてた) (7/31にリリースしてた) (7/29にリリース)
  • 29. .NET Coreはベータ(2) • UWPはRTM .NET Core CoreCLR .NET Native ASP.NET 5 UWP beta beta わかる CoreFX beta .NET Framework 4.6 選べる RTM RTM Debug Release RTM 依存先がベータ?!

Editor's Notes

  • #2: https://github.com/ufcpp/UfcppSample/
  • #3: 「たぶん」とつく理由も最後で話すけども
  • #5: 予想ではたぶん、Windows 10関連の部分だけ前倒しリリース
  • #7: CoreCLR/CoreFXに加えて、これから話すxproj, project.json, dotnetターゲットの辺り、あんまりはっきりと区別のある資料全然なくて。 割りかし混乱気味。というか、作ってる人ら的にも今整理の真っ最中な予感あり
  • #9: 実装が違っても、規約的に互換性ありなら同じコード・同じDLLでプログラムが動く
  • #19: .NET 4.5ダメっぽいよね?たぶん。
  • #22: Windows 10の前倒しリリースにより、Visual Studioチームが悲鳴あげてそう
  • #31: 思うに、UWPもこれまでの判断基準でいうとベータなんだけど、Windows 10出した手前大々的にベータと言えないのかな?