Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Modern .NET

2,293 views

Published on

2015/8/8
C#UG&codeseek勉強会
「Visual Studio 2015リリース記念」
にて発表

Published in: Technology
  • Be the first to comment

Modern .NET

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

×