Unityと.NETとMono

(2017-03-05)

.NETとかよくわからなかったのでまとめてみた。

.NET Framework

.NET Framework - Wikipedia

Microsoftが開発したアプリケーション開発、実行環境。

各言語のコンパイラによって言語、環境によらない共通の中間言語(CIL, Common Intermediate Language)バイナリ(exeやdll)に変換し、 実行時に共通言語基盤(CLI, Common Language Infrastructure)の仮想実行システム(VES)が環境依存の機械語を動的に生成(JIT, Just in time)する。 CLIの仕様はECMAで標準化されていて、Microsoftが実装したCLIが共通言語ランタイム(CLR)。Windowsでしか動かない。

.NET Core

.NET Core - .NET Core による .NET のクロスプラットフォームへの移行

Microsoft/dotnet

オープンソースで、クロスプラットフォームに対応した.NET。CoreCLRはWindowsだけではなくMacやLinuxでも動く。 .NET Frameworkと共通のAPIもあるが、GUIまわりでどちらかにしかないAPIが存在する。

Mono

オープンソースで、クロスプラットフォームな.NET Framework互換ソフトウェア。C#のコンパイラとCLIが実装されている。 Unityはこれを使っているが、バージョンが古くて使えないライブラリがある。

.NET CoreでHello World

インストール手順に沿って dotnetコマンドを使えるようにする。

Hello Worldまで。

$ dotnet console -o hwapp
$ cd hwapp
$ ls
Program.cs	hwapp.csproj

$ dotnet restore
$ ls
Program.cs	hwapp.csproj	obj

$ ls obj
hwapp.csproj.nuget.g.props	project.assets.json
hwapp.csproj.nuget.g.targets

# dotnet build
$ dotnet run
Hello World!

$ dotnet bin/Debug/netcoreapp1.1/hwapp.dll 
Hello World!

特に.NET CoreにしかないAPIも使っていないのでmono(.NET Framework)ででも実行できる。

$ cat Program.cs 
using System;

namespace hwapp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

$ mono bin/Debug/netcoreapp1.1/hwapp.dll 
Hello World!

参考

Unityと.NET