.NET Coreを使ってみる その2 Visual Studioで開発する

samatsu 6/7/2016 8230 N/A Dot NET Core

.NET Coreを使ってみる その1では .NET CoreのVisual Studio用のSDKをダウンロードしてインストールし、コマンドプロンプトのみでプロジェクトを作成して、ビルド、実行してみました。今回は Visual Studio 2015 Community Editionを使用して .NET Core用のコンソールアプリケーションを作成してみます。もし、Visual Studio用の .NET Core SDKをインストールしていない場合は、https://www.microsoft.com/net/core#windows からインストーラーをダウンロードしてインストールしてください。

今回の動作か確認環境は次の通りです

  • Visual Studio 2015 Community
  • .NET Core RC2

1. プロジェクトの作成

Visual Studio を起動して、プロジェクトを新規作成します。Visual Studio用の .NET Core のインストールに成功していれば、"コンソール アプリケーション(.NET Core)"というプロジェクトテンプレートが選択できるはずです。

デフォルトで作成された Program.cs を次のように編集して F5ボタンで試しに実行してみます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace sample2
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string name = "DotNetCore";
            Console.WriteLine($"こんにちは {name}! ");
            Console.ReadLine();

        }
    }
}

すると、日本語部分が文字化けしました。

個人的にはLinux,iOSの環境でも動くツールを開発するんだから英語でもいいんじゃないかと思ったのですが、Bingった結果 こちらのページなど解決方法を公開している方が何名かいました。ありがたいです。参考にして日本語を表示できるようにしてみることにします。

2.日本語の文字化けに対応する

参考にさせていただいたページによると、コマンドプロンプトはShift-JISでテキストを出力するのに対して、Console.WriteLineは UTF-8で文字を出力するため文字化けが発生するらしいです。解決策はSystem.Text.Encoding.RegisterProviderメソッドにCodePageEncodingProviderを設定してShift JISも入出力エンコーディングで使えるようにすればいいようです。

.NET Core用のコンソールアプリケーションプロジェクトには CodePageEncodingProviderが含まれるSystem.Text.Encoding.CodePages.dllが含まれていないため NuGetパッケージから追加します。下図のようにNuGetパッケージマネージャーで System.Text.Encoding.CodePagesアセンブリを検索してインストールします(.NET CoreはRC2であるあため、プレリリースを含めるにチェックしています)。

プログラムを次のように変更します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace sample2
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string name = "DotNetCore";
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
            Console.WriteLine($"こんにちは {name}! ");
            Console.ReadLine();

        }
    }
}

再度 Visual Studioからデバッグ実行すると今度はちゃんと文字化けされずに表示されました。

ちなみに、project.jsonは次のように依存関係が追加されていました。

  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    },
    "System.Text.Encoding.CodePages": "4.0.1-rc2-24027"
  },

以上です。使用できるAPIとかはもちろん制限がありますが .NET Coreを使用してもうコンソールアプリは一通り問題なく作成できそうです。 時間があったら ASPNET Core とか EntitiFramework Coreも触ってみたいと思います。