#author("2017-08-16T21:28:38+00:00","default:admin","admin") -[[マイクロソフト系技術情報 Wiki:https://techinfoofmicrosofttech.osscons.jp/index.php?FrontPage]] -[[Insider.NET : .NET ソリューションのための技術情報フォーラム:http://www.atmarkit.co.jp/ait/subtop/dotnet/]] -[[.NETテクノロジーまとめ:http://qiita.com/kenji-yokoi/items/2388619055095d9c93bd]] -[[.NET Framework のバージョン対応表:http://qiita.com/nskydiving/items/3af8bab5a0a63ccb9893]] --[[.NET Framework の新機能を超簡単に説明する:http://qiita.com/nskydiving/items/2ff8285acb72c4e59caf]] -[[.NET Core - .NET Core による .NET のクロスプラットフォームへの移行:https://msdn.microsoft.com/ja-jp/magazine/mt694084.aspx]] ---- *.NET Core 2.0 [#v0792f77] -[[Announcing .NET Core 2.0:https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-net-core-2-0/]] -[[マイクロソフト、「.NET Core 2.0」などを公開:https://japan.zdnet.com/article/35105758/]] -[[マイクロソフト、オープンソースの.NET Core 2.0をリリース。コードを書きながら裏でテストが動くLive Unit Testingも可能に:http://www.publickey1.jp/blog/17/net_core_20live_unit_testing.html]] -[[Microsoft、C++技術で.NET Core 2の高速化実現:http://news.mynavi.jp/news/2017/07/22/096/]] *ASP.NET Core [#v1f170f9] -[[「いよいよ登場「ASP.NET Core 1.0」 マルチプラットフォームな.NETとは?」連載一覧:https://codezine.jp/article/corner/674]] -[[Hello World, ASP.NET Core 1.0!:https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10/]] -[[ASP.NET Core 1.0の概要を整理する:http://ryuichi111std.hatenablog.com/entry/2016/05/28/160518]] -[[ASP.NET Core - マイクロソフト系技術情報 Wiki - OSSコンソーシアム:https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Core]] -[[.NET Core 1.1 をリリース:https://blogs.msdn.microsoft.com/visualstudio_jpn/2016/11/24/announcing-net-core-1-1/]] -[[ASP.NETからASP.NET Coreに移行した話:http://qiita.com/taiga_takahari/items/240a4b0453990db4005f]] -[[ASP.NET MVC アプリケーションを ASP.NET Core MVC にマイグレーションしようとして挫折した話:http://blog.shibayan.jp/entry/20160629/1467209826]] -[[ASP.NET Core MVC に関する投稿:http://mrgchr.hatenablog.com/archive/category/ASP.NET%20Core%20MVC]] -[[macOS ではじめる ASP.NET Core x Entity Framework Core x PostgreSQL:http://qiita.com/k--kato/items/134256c4954aa6115502]] -[[.NET Core on Linux Handson:https://www.gitbook.com/book/tanaka-takayoshi/-net-core-on-linux-handson/details]] -[[ASP.NET Core アプリを Linux サーバーで公開:https://creativeweb.jp/code/aspdotnetcore-linux]] -[[ASP.NET Core を始める際に知っておきたい Web フロントエンドツールの種類と最新トレンド:http://tkiryu.hatenablog.com/entry/2017/02/15/084115]] **ASP.NETの歴史 [#x48bf873] -1996年 : Active Server Pages -2002年 : ASP.NET -2009年 : ASP.NET MVC -2016年 : ASP.NET Core **ASP.NET Core の特徴 [#ta3256cb] -オープンソースで開発されている -動作環境がWindowsに加えMacとLinuxに正式に対応した -これまで個別の機能であった「ASP.NET MVC」「WebAPI」「WebPages」は、ASP.NET Coreで再設計され、1つに統合された -Linux/Mac/Windows共通で使用できるコマンドラインインターフェース「.NET CLI」が用意された。このコマンドを使用することで、リポジトリから取得してきたソースコードを、環境を意識することなく依存解決を行い、ビルドし、実行できるようになった。 -IIS 非依存。libuvベースのKestrelという新しいWebサーバーが提供され、IISやNginxとの連携することもできる。 -MVC/Entity Framework Core の知識を必須とするため、ASP.NET Web Forms や型付きデータセットで開発されてきた方々には、非常にハードルが高い開発プラットフォームにもなっている -高水準 UI 部品が大量に存在していた ASP.NET Web Forms から、いきなりスクラッチ開発に近い ASP.NET MVC/EF 開発ベースに移れと言われても正直キツイ(らしい) **MVC [#yd804bbe] -[[ASP.NET MVC Core 1.0 の基本的な使い方:https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10-part3/]] -[[ASP.NET Core - ASP.NET Core MVC 向け機能スライス:https://msdn.microsoft.com/ja-jp/magazine/mt763233.aspx]] -[[『ASP.NET MVCプログラミング入門』を読んだ:https://ryo511.info/archives/3946]] -ブラウザからのリクエストは、URL で指定されたコントローラクラスのアクションメソッドで処理される --例えば、ブラウザから http://xxx.xxx.xxx/Sample01/GetAuthors/ という URL を呼び出すと、Sample01Controller.cs というクラスの、GetAuthors() というメソッドが呼び出される ---第一引数でコントローラクラス名を指定し、第二引数でアクションメソッド名を指定 --このメソッドの中では、ビジネスロジッククラスやデータアクセスクラスを呼び出してデータベースからデータを取り出したり、処理結果をビューに引き渡したりする。 -クライアントに送り返す HTML データは、対応するビューファイル(.cshtml ファイル)により作成される。 --コントローラクラスからデータを受け取り、それを使って、クライアントに送り返す HTML ページを作成する。 -ASP.NET MVC では、モデルに相当するものが何であるのかは決まっていない --”MVC” = Model + View + Controller という名前がついているものの、ASP.NET MVC において明確に扱いが決まっているのは Controller と View のみであり、Model が何であるのかの定義はない --一般的には、以下のうちのいずれか(または複数)が Model に相当 ---データベースとやり取りされるデータの構造(=EF のデータモデル) ---ビューに対して引き渡すデータの構造(=ビューモデル) ---クライアントから送られてくるデータの構造(=リクエストパラメータバインディングのモデル) **[[Entity Framework Core:https://docs.microsoft.com/en-us/ef/core/]] [#zf6ac0e7] -[[Entity Framework Core 1.0 の基本的な使い方:https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10-part2/]] -[[新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~:https://docs.com/decode2016/9570/dev-003-entity-framework-core-1-0]] -[[「Entity Framework Coreを使ってみる」 公開用:https://www.slideshare.net/esmsec/entity-framework-core]] -[[Entity Framework Core 1.0 で SQLite を使ってみる:http://gooner.hateblo.jp/entry/2016/03/04/071400]] -[[データ ポイント - EF Core 1.1: お気に入りをいくつか:https://msdn.microsoft.com/ja-jp/magazine/mt745093.aspx]] -[[.NET Core(Entity Framework Core)でCode Firstする:http://ryuichi111std.hatenablog.com/entry/2016/11/08/023809]] -従来の Entity Framework と異なり、EF Core では O/R マッパーファイル(*.dbml)を使うことができない -このため、O/R マッピング(データベーステーブルのどこを構造体クラスのどこにマッピングするのか?)はすべてコードで指定する必要がある -ツールを利用して自動生成させることも(ある程度は)可能ですが、現時点(2016/07/02)では、手で書いてしまったほうがやりやすい ***Code First [#qc92d1d8] -今後はこれが主流 -ソフトウェアを開発するにあたり、「リレーショナルデータベース設計ありき」ではなくて「作成するソフトウェアの”ドメイン領域の分析”に注力し、データベースはモデルのあるタイミングにおけるシリアライズ結果を保存する入れ物」的な考え方が基本となっている -リレーショナルデータベースとドメインオブジェクトは、その概念の相違から「インピーダンス・ミスマッチ」が発生することは必然であり、ソフトウェア側の人間としては、ドメイン領域のオブジェクトモデリングに集中すべき、という思想 ***Database First [#r9775169] ***Model First [#h8e57f6f] ***使い方 [#rf17b83d] -以下のNuGetパッケージをインストール(DBにSQLiteを使う場合) $ dotnet add package Microsoft.EntityFrameworkCore $ dotnet add package Microsoft.EntityFrameworkCore.Tools $ dotnet add package Microsoft.EntityFrameworkCore.Sqlite $ dotnet add package Microsoft.EntityFrameworkCore.Sqlite.Design -[プロジェクト名].csproj に以下を追記 &color(red){<= これをやらないと「dotnet ef」コマンドが使えない}; <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" /> </ItemGroup> -プロジェクトフォルダにて以下を実行 $ dotnet restore -DBスキーマ構築・更新 $ dotnet ef migrations add Initial $ dotnet ef database update --上記「Initial」の記述は何でもよい **.NET CLI [#n2ead31b] |コマンド|説明|h |dotnet new|言語に C# を使用して、クラス ライブラリまたはコンソール アプリ向けに有効なプロジェクトを初期化します。| |dotnet restore|指定したプロジェクトの project.json ファイルで定義されている依存関係を復元します。通常、依存関係とはアプリで使用する NuGet パッケージです。| |dotnet build|コードをビルドします。このコマンドは、プロジェクトの中間言語 (IL) バイナリを生成します。プロジェクトがコンソール アプリの場合、生成される出力は、すぐに実行できる実行可能ファイルです。既定では、build コマンドは、コマンドが呼び出されたディレクトリの bin ディレクトリに、ビルド済みのアセンブリと実行可能ファイル (該当する場合) を出力します。| |dotnet test|優秀なツールは、必ずテストを実行できるようになっています。このコマンドは、project.json ファイルで指定できるランナーを使用して、一連のテストを実行できるようにします。現在サポートされているテスト ランナーは、xUnit と NUnit です。| |dotnet publish|ターゲットのコンピューターで実行するためにアプリを公開します。| |dotnet pack|pack コマンドは、プロジェクトを NuGet パッケージにパッケージ化します。出力される一連の nupkg ファイルは、フィードにアップロードするか、ローカル フォルダーをオーバーライドすることによって復元操作で使用されます。| |dotnet run|run コマンドは、アプリをコンパイルして実行します。このコマンドで実行される操作は、Ctrl キーを押しながら F5 キーを押したときの操作と同じと考えられます。Visual Studio を使用しない点のみが異なります。| **プロジェクトのファイル構成 [#ecd22865] -[プロジェクト名].csproj --プロジェクトで使用するライブラリとバージョンを管理 -Program.cs ファイル --Main() 関数が書かれており、Web サーバを起動するためのコードが書かれている -Startup.cs ファイル --ASP.NET ランタイムの初期化コードが書かれている -wwwroot フォルダ ... 公開する静的コンテンツ(HTML ファイルや JPEG ファイルなど)を置く -Models フォルダ ... -Conrtoller フォルダ ... -App_Data フォルダ ... データベースファイルを置くフォルダ。名前は App_Data でなくてもよい(昔の名残) **ライブラリ [#r6f1c4bc] -Microsoft.AspNetCore.Mvc ASP.NET Core MVC 1.0 本体 -Microsoft.AspNetCore.Mvc.TagHelpers View ページの作成でタグヘルパーを使えるようにする -Microsoft.AspNetCore.StaticFiles 静的ファイルを返せるようにするライブラリ -Microsoft.EntityFrameworkCore データアクセスライブラリ Entity Framework Core 1.0 -Microsoft.EntityFrameworkCore.SqlServer Entity Framework Core の SQL Server 接続ドライバ *DBアクセス [#nb098d23] -[[.NET Coreで幾つかのデータベースアクセスを試してみる(SQL Server編):http://qiita.com/zaburo/items/0a215f4d9fad0aa0b8ef]] -ADO.NET .... 最も低レベルなAPIですが、高速 -Entity Framework ... いわゆるO/Rマッパで、高レベルなAPIだが、相対的に遅い -Dapper ... Micro ORMと言われる部類のもので、中レベルなAPIだが、比較的高速(ADOに近い) **[[Dapper:https://github.com/StackExchange/Dapper]] [#m3017d4d] -[[【C#】Dapperについてまとめてみた:http://sweets-junkie.hatenablog.com/entry/2014/03/07/010004]] -[[Dapperを触ってみた(導入、簡単な操作編)(Micro-ORM):http://j-levia.hatenablog.jp/entry/2017/04/17/213921]] -[[DapperのQueryを使ってマルチマッピングしてみる:http://qiita.com/NetSeed/items/dda1096d03dfbf5fe431]] -[[ASP.NET Core + Dapper で高パフォーマンスWEB開発を実践する:http://kikki.hatenablog.com/entry/2016/10/26/100604]] *LINQ(Language Integrated Query) [#n7125c24] -[[統合言語クエリ (LINQ):https://docs.microsoft.com/ja-jp/dotnet/articles/csharp/linq/]] -[[C#のLINQが便利!:http://hexadrive.jp/hexablog/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/15100/]] -[[[C#] これだけ押さえておけば大丈夫!?LINQ拡張メソッドまとめ:http://dev.classmethod.jp/etc/c-sharp-linq-extension-methods-review/]] -[[【C#】LINQ備忘録1 ~初級編~:http://qiita.com/logikuma/items/8ff0d05a72e7142e76a3]] -[[【C#】LINQ ForEach, Select, Where解説【LINQ】:http://hiyotama.hatenablog.com/entry/2016/12/10/090000]] -IEnumerable インタフェースを実装している型ならば利用できる -using System.Linq; を指定 *テスト [#w82df616] -[[Visual Studio 2017 での Live Unit Testing:https://docs.microsoft.com/ja-jp/visualstudio/test/live-unit-testing]] -[[MicrosoftがVisual Studio Testをオープンソース化:https://www.infoq.com/jp/news/2017/01/visual-studio-test]] -[[テスト駆動開発(TDD) in .NET:https://takanosho.wordpress.com/2016/06/10/tdd-in-dotnet/]] **[[xUnit:https://xunit.github.io]] [#w842d8fd] -[[xUnit.net の使い方(基本編):http://qiita.com/inabe49/items/2b8fa66885b0ea82798c]] -[[xUnit.net の使い方(Context):http://qiita.com/inabe49/items/0dad7360a485c68e291e]] -[[xUnit.net の使い方(ソースの指定):http://qiita.com/inabe49/items/65da1f0c81bc67860e86]] -[[.NET Core と xUnit でライブユニットテスト(的なやつ):http://beachside.hatenablog.com/entry/2017/04/04/200000]] -[[ASP.NET Core MVC と xUnit.NET でユニットテストを行う Part.0(準備編):http://mrgchr.hatenablog.com/entry/2016/10/26/000000]] -[[ASP.NET Core MVC と xUnit.NET でユニットテストを行う Part.1:http://mrgchr.hatenablog.com/entry/2016/10/27/000000]] -[[ASP.NET Core MVC と xUnit.NET でユニットテストを行う Part.2:http://mrgchr.hatenablog.com/entry/2016/11/09/000000]] -[[Visual Studio for Mac で xUnit を実行する方法:http://qiita.com/amay077/items/6ce51e7ea382370571f7]] **[[NUnit:https://www.nunit.org]] [#ye4eb705] -[[NUnit の使い方:https://m-tmatma.github.io/NUnit/NUnit.html]] -[[Visual Studio for Macで単体テストをする時に役立つ3つのポイント:https://blog.areare.net/archives/11261]] *Yeoman [#fb3caaed] -[[Introduction to building projects with Yeoman in ASP.NET Core:https://docs.microsoft.com/en-us/aspnet/core/client-side/yeoman]] -[[.NET Core開発で project.json / .csproj に手動で参照追加する場合・・・:http://ryuichi111std.hatenablog.com/entry/2016/11/23/203744]] --[[.NET API Browser:https://docs.microsoft.com/ja-jp/dotnet/api/index]] **インストールからプロジェクト作成・実行 [#s153140c] -インストール $ npm install -g yo bower $ npm install -g generator-aspnet --[[yo:https://www.npmjs.com/package/yo]] ... Yeoman --[[bower:https://www.npmjs.com/package/bower]] ... フロントエンドのライブラリ管理 --[[generator-aspnet:https://www.npmjs.com/package/generator-aspnet]] ... ASP.NET Core 用ジェネレータ -空のASP.NET Core Web Applicationプロジェクトを作成 $ yo aspnet $ cd [プロジェクトのフォルダ] $ dotnet restore $ dotnet run -Visual Studio Code を起動 $ code . --これで起動しない場合は Visual Studio Code の画面で「シェルコマンド:PATH 内に 'code' コマンドをインストールします」を実行 -yo aspnet:app [options] [<type>] [<applicationName>] [<ui>] --type ---web for Empty Web Application ---console for Console Application ---mvc for Web Application ---mvcbasic for Web Application Basic ---webapi for Web API Application ---nancy for Nancy ASP.NET Application ---classlib for Class Library ---mstest MSTest Test project (MSTest) ---xunit xUnit Test project (xUnit.net) --ui ---bootstrap for Bootstrap (this is the default and does not have to be specified explicitly) ---semantic for Semantic UI *NuGet [#fdb65434] -[[【VisualStudio】NuGetの使い方 | ぷろちゃん:https://programchan.com/archives/135]] -[[.NET開発の新標準「NuGet」入門(前編):http://www.atmarkit.co.jp/fdotnet/chushin/nuget_01/nuget_01_01.html]] -[[.NET開発の新標準「NuGet」入門(後編):http://www.atmarkit.co.jp/fdotnet/chushin/nuget_02/nuget_02_01.html]] -Visual Studio に同梱されているので、標準で使える *PowerShell [#k714f242] -[[PowerShell 使い方メモ:http://qiita.com/opengl-8080/items/bb0f5e4f1c7ce045cc57]] -[[なぜPowerShellが危険なのか? 増え続ける悪用の現状:http://www.itmedia.co.jp/enterprise/articles/1702/08/news018.html]] -[[MicrosoftがPowerShellをオープンソース化しLinuxやOS Xにも提供…Bash on Windowsとの差別化は?:http://jp.techcrunch.com/2016/08/19/20160818microsoft-open-sources-powershell-brings-it-to-linux-and-os-x/]] *Tips [#sb031f0e] -[[書籍「実戦で役立つ C#プログラミングのイディオム/定石&パターン」:http://gihyo.jp/book/2017/978-4-7741-8758-7/support]] -[[ASP.NET Core MVC アプリケーションでスキャフォールディングが使えない時は:http://blog.shibayan.jp/entry/20160928/1474990457]]