VB のたまご

作成日: 2017/08/13, 更新日: 2017/08/13


.NET Core で dll ではなく、exe を作りたい

  •  「dotnet build」、「dotnet run」どちらのコマンドでやっても、生成されるのは dll ファイルです。 実行する時は「dotnet xxx.dll」とすれば実行されるので、実行できないわけではないのですが、 やはり exe ファイルとして作成したい時もあります。

  •  .NET Core で実行ファイルを作成する場合は、発行コマンドから作成します。

  • ・環境
  • ・Ubuntu 17.04
  • ・.NET Core 2 Preview 2

  • 参考
  • 備忘録
    .NET Core で 実行ファイル(.exe)を作成する
    http://kagasu.hatenablog.com/entry/2017/04/16/192117
    
    Qiita
    [.NET Core].NET Coreで実行ファイルを作成する
    http://qiita.com/yaegaki/items/bdf529f07552d72bc6e5
    
    Microsoft Docs
    project.json プロパティと csproj プロパティの間のマッピング
    https://docs.microsoft.com/ja-jp/dotnet/core/tools/project-json-to-csproj
    


プロジェクトファイルの編集

  •  xxx.vbproj ファイルというプロジェクトを管理するファイルを編集します。 「RuntimeIdentifiers」タグを追加して、ターゲットとするアーキテクチャを記載します。 例えば、以下の記載だと、64ビット用 Windows 10、64ビット用 Ubuntu 16.04 の2つをターゲットに指定します。
  • <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.0</TargetFramework>
        <RuntimeIdentifiers>win10-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
      </PropertyGroup>
    
    </Project>
    

  •  2017年8月現在では、Microsoft のサイトを見ると、 Windows 7 ~ 10 の 32 /64 ビット、各種 Linux の 64 ビット、(Mac)OSX の 64 ビットと、いろいろな環境が対象になっていますね。


dotnet restore コマンドの実行

  •  「dotnet restore」というコマンドを実行して、パッケージに関する必要データを取得してきます。 対象となるアーキテクチャの実行環境とか NuGet するプログラムとかですね。
  • $ dotnet restore
    


dotnet publish コマンドの実行

  •  やっと本題です。「dotnet publish」というコマンドをターゲットとなるアーキテクチャ向けに実行することで、 exe ファイルを作成することができます。このコマンドは1コマンド1ターゲットとなるアーキテクチャです。

  •  例えば以下のように実行します。

  •  Windows 10, 64 ビット向けのプログラムを作成する
  • $ dotnet publish -c Release -r win10-x64
    

  •  Ubuntu 16.04, 64 ビット向けのプログラムを作成する
  • $ dotnet publish -c Release -r ubuntu.16.04-x64
    

  •  「-c」は Configuration、つまり Debug でビルドするか Relase でビルドするかを指定します。 「-r」は runtime、つまり動作環境を指定します。その他のオプションは「dotnet publish --help」と入力することでヘルプを見ることが出来ます。


実行してみる

  •  発行されたプログラムは、「プロジェクト名/bin/Release/netcoreapp2.0/アーキテクチャ名」というフォルダ内に一式まとまって作成されています。 プログラムを「ConsoleApplication1」という名前で作成している場合、 Windows 10, 64 ビットの場合は「ConsoleApplication1/bin/Release/netcoreapp2.0/win10-x64」、 Ubuntu 16.04, 64 ビットの場合は「ConsoleApplication1/bin/Release/netcoreapp2.0/ubuntu.16.04-x64」という具合ですね。

  •  私の環境は、「Ubuntu 17.04」なので対象外ですが、「Ubuntu 16.04」として作成したものを動かすことが出来ました! (vbapp1 という名前でプログラムを作った)
  • $ ./vbapp1
    Hello World VB.NET on .NET Core / Ubuntu 17.04!
    


まとめ

  •  vbproj ファイルには OutputType タグに「Exe」と記載しているのですが、「Library」としてビルドされてしまうみたいですね。 仕様ですかね。。。