しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

.NET Core 1.0 / ASP.NET Core 1.0 の RC 2 と Visual Studio 2015 Tooling Preview 1 がリリースされました

時間がかかったようですが、ついに .NET Core 1.0 と ASP.NET Core 1.0 の RC 2 がリリースされました。

Announcing ASP.NET Core RC2 - .NET Blog

RC 2 公開に伴い .NET のページが新しく用意されたみたいですね。ちゃんと .NET Core のページも各プラットフォーム向けに、いい感じに作られています。

.NET | Build. Test. Deploy.

そして肝心の RC 2 ですが、Windows 向けでは Visual Studio 2015 向けのツール込みでインストール出来るようになっています。ツールは予告のあった通り Preview 1 となります。

完了するとテンプレートが Visual Studio に追加され、 dotnet コマンドが使えるようになります。

新しく .NET Core というカテゴリが追加されました。コンソールアプリケーション、Web アプリケーション、クラスライブラリが今のところ開発対象です。

RC 2 になったら本格的に ASP.NET Core 周りをガッツリ使っていこうと思っていたので、しばらくの間は ASP.NET Core 中心に触っていく予定です。折角なので、それぞれについてもう少し見ていきます。

.NET Core / CLI

とりあえず、何時ものように dotnet new してから restore / run すると簡単に試すことが出来るので、実際にコマンドを叩きこみました。コンパイルが走って実行されました。

これまではインメモリでコンパイルから実行まで行われていた気がしますが、普通に dll が生成されていました。コンパイル不要という触れ込みが最初の方はありましたが、パフォーマンスを優先した感があります。

生成される project.json は以前に比べてシンプルになりました。これまでは必要なアセンブリを全て追加する必要がありましたが、基本的なアセンブリはプラットフォームという形でまとめられています。

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

Microsoft.NETCore.App というのが .NET Core で利用可能なアセンブリをまとめたものになります。

この Microsoft.NETCore.App の実体はインストールディレクトリの shared 以下に保存されています。中には .NET Core のランタイムと CoreFx のアセンブリが入っています。

中には依存関係を定義した Microsoft.NETCore.App.deps.json というファイルもあります。

昔はクラスライブラリとしてビルドすると nupkg が生成されていた気がしますが、デフォルトの設定では nupkg が生成されなくなっていました。

ビルドオプションを変更すれば nupkg として出せるようですが、見つけることが出来ませんでした。

ASP.NET Core

プロジェクトテンプレートから ASP.NET Core Web Application を選択すると、これまでのようにテンプレートを更に選択するダイアログが表示されます。今は 3 つしかないです。

空のテンプレートを選ぶと本当に空っぽなので、最初は Web アプリケーションを選ぶのが無難です。

Web アプリケーションのテンプレートを使って作成した時のプロジェクト構造は以下のようになります。

エントリポイントは紆余曲折あり、最終的には WebHostBuilder を使って実行する形に落ち着きました。

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

あくまでもエントリポイントなので、実際にアプリケーション内部で使うコンポーネントの設定は Startup クラスで行います。こちらは実行環境の設定を行うようになってます。

基本的に RC 2 には Breaking Changes しか存在していないですが、その中でも地味に変わったのが NuGet のパッケージ ID です。AspNet から AspNetCore に変更されました。

MVC 5 を使っている時に -Pre を有効にすると 6 が落ちてきたので、これはいい変更だと思ってます。

とりあえず細かい変更点は GitHub の Issue を見てもらうとして、実際に動かします。といっても F5 を押せば IIS Express を使ってアプリケーションが起動します。

思っていた以上に時間がかかっていましたが、やっと RC 2 に到達して API が安定してきた感じがあるので、実際にアプリケーション開発を進めてみようかと思います。

https://github.com/aspnet/Announcements/milestones/1.0.0-rc2

これまで RC 2 より前のバージョンで開発していた人は、Issue を確認しておいたほうが良いです。

Visual Studio 2015 Tooling

まだツール周りは Preview 1 ですが、これまで通り Razor では Intellisense が動作しますし、コントローラのスキャフォールディングも問題なさそうです。

テンプレートもちゃんと .NET Core 向けに用意されています。最低限の開発は出来そうな感じがします。

ソリューションエクスプローラからプロジェクトを右クリックして表示されるメニューには、新しくユーザーシークレットの管理機能が付いていました。

ユーザー固有のストレージに JSON でデータを保存出来る機能です。基本的には開発用ですね。

Safe storage of app secrets in development in ASP.NET Core | Microsoft Learn

GitHub などにコミットしたくないデータはこっちに保存しつつ、本番環境では Web Apps の App Settings から読み込むといった設定を簡単に行えそうです。

とりあえずざっくりと概要をまとめたので、次からは ASP.NET Core 1.0 周りを見ていきたいです。