「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>.NET Core on Linux]] *目次 [#d123527e] #contents *概要 [#bd31edc0] -.NET CoreをLinux上にインストールして、 -.NET Coreアプリをビルド、デプロイ、実行する。 **全容 [#k898e7ee] -[[.NET Coreのデプロイ - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?.NET%20Core%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4]] **仕組 [#p1125a78] -*.dllファイルを動かしているように見えるので[[Wine]]などを使用しているようにみえるが、 -.NETの*.dllファイルは、ネイティブではなく中間言語なので、コレを使用して、~ Linuxネイティブの実行イメージを再生させる仕組みで動作している模様。 --Is Core.NET dependent on WINE? - Full Framework - .NET Foundation Forums~ http://forums.dotnetfoundation.org/t/is-core-net-dependent-on-wine/1673 ---Comparing WINE and .NET Core is pretty much apples-and-oranges. ---WINE is an alternate implementation of a lot of the Windows DLLs,~ so that Windows programs can (attempt) to run on Linux. ---.NET Core allows code to be compiled and run natively on Linux. **サンプル [#o6c9a7ee] 下記は、Visual Studioプロジェクトのサンプル(NuGetを使用した)。 using System; using Newtonsoft.Json; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string[] str_ary = new string[] { "aaa", "bbb", "ccc" }; Console.WriteLine(JsonConvert.SerializeObject(str_ary)); Console.WriteLine(Console.ReadKey().KeyChar); } } } **全容 [#k898e7ee] -[[.NET Coreのデプロイ - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?.NET%20Core%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4]] *CentOS [#a5d769d4] **.NET Coreのインストール [#l62137da] [[SCD>#l0581cb3]]の場合を除き、.NET Core ネイティブ インストーラーにより、.NET Core をインストールする。 -Linux における .NET Core の前提条件 >~ CentOS 7.1 (64 bit) および Oracle Linux 7.1 (64 bit) 用の .NET Core をインストールする~ https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#install-net-core-for-centos-71-64-bit--oracle-linux-71-64-bit --信頼済みとして Microsoft プロダクト キーを登録。 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc --必要なバージョンのホスト パッケージ フィードを設定。 sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo' --.NET Core をインストール。 sudo yum update sudo yum install libunwind libicu <--- 何気に、SCDでも必要な前提ライブラリをインストールしている。 sudo yum install dotnet-sdk-2.0.0 --パスに dotnet を追加します。 export PATH=$PATH:$HOME/dotnet --dotnet --version コマンドを実行して、インストールが成功したことを確認。 dotnet --version **CentOS上でビルドして動かす([[FDD>#rf02805f]] & [[SCD>#l0581cb3]])。 [#pdbdd6a7] dotnet publishコマンドのオプションで、[[FDD>#rf02805f]]と[[SCD>#l0581cb3]]を選択可能であるもよう。 ***dotnet new consoleで生成したものをビルド・実行 [#qd7686f6] -コンソールアプリケーションテンプレートからソースを作成~ https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-new?tabs=netcore2x $ dotnet new console -ビルド~ https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-publish?tabs=netcore2x --プロジェクト・ファイルのあるフォルダでオプションから[[FDD>#rf02805f]]と[[SCD>#l0581cb3]]を選択してビルドを実行する。 ---[[FDD>#rf02805f]] $ dotnet publish -f netcoreapp2.0 ---[[SCD>#l0581cb3]] $ dotnet publish -c Release -r centos.7-x64 --Visual Studioで作成したプロジェクト・ソリューションもビルド可能。 -実行~ dotnet new consoleで、name を省略したとき、~ プロジェクト名はローカル・フォルダ名になる。~ ここでは、dotフォルダでdotnet new consoleしたのでdll名もdotになる。 $ dotnet dot.dll Hello World! ***Visual Studioで生成したものをビルド・実行 [#n0003dc7] Visual Studioで生成したものを、[[上記と同じ手順>#qd7686f6]]で、ビルド・実行可能。 **Windows上でビルドしたものを動かす。 [#p52d2bc1] -ここでは、Visual Studioでビルドする手順のみ説明する(dotnetでもビルドできるが)。 -Windows上でVisual Studioを使用して、[[FDD>#rf02805f]]と[[SCD>#l0581cb3]]の其々のビルドを行う。 ***FDD [#rf02805f] Visual Studioで生成したものをビルド・実行 -生成~ Visual Studioのプロジェクト・テンプレートを使用して、.NET Coreアプリケーションを生成する。 -ビルド~ Visual Studioを使用してビルドする。 -実行~ Visual Studioを使用してビルドされたアセンブリを直接指定。 $ dotnet ./ConsoleApp1.dll ["aaa","bbb","ccc"] ***SCD [#l0581cb3] Visual Studioで生成したものをビルド・実行 -前提 --Linux における .NET Core の前提条件 | Microsoft Docs~ https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#centos -作業 --以下のコマンドで前提条件ライブラリのインストール状況を確認できる。 $ sudo yum list installed libunwind lttng-ust libcurl openssl-libs libuuid krb5-libs libicu zlib Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Installed Packages krb5-libs.x86_64 1.15.1-8.el7 @anaconda libcurl.x86_64 7.29.0-42.el7_4.1 @updates libicu.x86_64 50.1.2-15.el7 @base libunwind.x86_64 2:1.2-2.el7 @base libuuid.x86_64 2.23.2-43.el7_4.2 @updates openssl-libs.x86_64 1:1.0.2k-8.el7 @anaconda zlib.x86_64 1.2.7-17.el7 @anaconda --以下のように、プロジェクト・ファイル中の~ PropertyGroup - RuntimeIdentifiersセクションに、ランタイム識別子 (RID) を足す。~ <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers> <RuntimeIdentifiers>win10-x64;centos.7-x64;ubuntu.16.04-x64</RuntimeIdentifiers> ---.NET Core のランタイム識別子 (RID) のカタログ~ https://docs.microsoft.com/ja-jp/dotnet/core/rid-catalog --RuntimeIdentifiers毎に発行するが、エラーになるので、その前に、~ 「obj\Release\netcoreapp2.0\発行先フォルダ\」に、Project出力の*.dllを~ コピーしておく(現在必要な手順だが将来的に解消得する可能性はある)。 -実行 $ ./ConsoleApp1 ["aaa","bbb","ccc"] -参考 --.NET Coreのデプロイ - マイクロソフト系技術情報 Wiki > 参考 > Microsoft Docs > SCD~ https://techinfoofmicrosofttech.osscons.jp/index.php?.NET%20Core%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4#ie53c21a *Ubuntu [#k029e1d4] **.NET Coreのインストール [#s27d142d] [[SCD>#rf2da76b]]の場合を除き、.NET Core ネイティブ インストーラーにより、.NET Core をインストールする。 -Linux における .NET Core の前提条件 >~ .NET Core for Ubuntu 14.04、Ubuntu 16.04、Ubuntu 16.10 および Linux Mint 17、Linux Mint 18 (64 ビット)~ https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#install-net-core-for-ubuntu-1404-ubuntu-1604-ubuntu-1610--linux-mint-17-linux-mint-18-64-bit --信頼済みとして Microsoft プロダクト キーを登録。 curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg --必要なバージョンのホスト パッケージ フィードを設定。 sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt-get update --.NET Core をインストール。 sudo apt-get install dotnet-sdk-2.0.0 --dotnet --version コマンドを実行して、インストールが成功したことを確認。 dotnet --version **Ubuntu上でビルドして動かす([[FDD>#u7da78b6]] & [[SCD>#rf2da76b]])。 [#i967650f] dotnet publishコマンドのオプションで、[[FDD>#u7da78b6]]と[[SCD>#rf2da76b]]を選択可能であるもよう。 ***dotnet new consoleで生成したものをビルド・実行 [#ec33be57] dotnet new consoleで生成したものを、[[上記と同じ手順>#qd7686f6]]で、ビルド・実行可能。 ランタイム識別子 (RID)だけ異なる。 $ dotnet publish -c Release -r ubuntu.16.04-x64 ***Visual Studioで生成したものをビルド・実行 [#zd75c51e] Visual Studioで生成したものを、[[上記と同じ手順>#ec33be57]]で、ビルド・実行可能。 **Windows上でビルドしたものを動かす。 [#pae4bb39] -ここでは、Visual Studioでビルドする手順のみ説明する(dotnetでもビルドできるが)。 -Windows上でVisual Studioを使用して、[[FDD>#u7da78b6]]と[[SCD>#rf2da76b]]の其々のビルドを行う。 ***FDD [#u7da78b6] プラットフォームに依存しないので、[[CentOSの手順>#rf02805f]]と同じになる。 ***SCD [#rf2da76b] Visual Studioで生成したものをビルド・実行 -前提 --Linux における .NET Core の前提条件 | Microsoft Docs~ https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#ubuntu -作業 --[[CentOSの手順>#l0581cb3]]を参考に作業する。 *参考 [#t7c2857c] **Microsoft Docs [#ycf4f1e2] -Linux における .NET Core の前提条件~ https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x -dotnet コマンド - .NET Core CLI~ https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet?tabs=netcore2x **osscons.jp [#qcb03875] ***[[ASP.NET Coreのインストールとデプロイ]] [#m545be0d] ***[[Red Hat Customer Portal > Chapter 1.>OpenShiftセカンド・ステップ#we8ccdea]] [#a71c6dc3] ***マイクロソフト系技術情報 Wiki [#v5eb2379] -[[.NET Coreのデプロイ>https://techinfoofmicrosofttech.osscons.jp/index.php?.NET%20Core%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4]] -[[ASP.NET Coreのデプロイ>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Core%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4]]