.NET CLI how to run app after publish on Linux

Toddams picture Toddams · May 22, 2016 · Viewed 7.7k times · Source

I spent ~4 hours investigation and still can't find out how to run published application ( dotnet publish )

Now I can download sources to my remote machine, then call dotnet build and dotnet run - then my app runs as intended. But I want to publish just DLL's (or *.so ?) to my VPS without source files.

What official docs says? To define command in project.json

"commands": {
    "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://unix:/var/aspnet/HelloMVC/kestrel.sock",
}

But it is obsolette, isn't it?

What about default samples?

In default VS2015 sample solution they use publish-iis, Full .NET framework and IIS server, but there is nothing about deployment on linux.

postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]

Here is my dotnet info

.NET Command Line Tools (1.0.0-preview1-002702)

Product Information:
 Version:     1.0.0-preview1-002702
 Commit Sha:  6cde21225e

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.10586
 OS Platform: Windows
 RID:         win10-x64

.NET Core RC2

Answer

Thomas picture Thomas · May 22, 2016

Do the following steps (starting from a RC2 portable application; the normal one):

  1. Remove the "type": "platform" annotation from all your dependencies (so it is actuall self-contained and no longer rely on a installed .NET Core platform).

  2. Add a node runtimes to your project.json (so NuGet is able to pull the necessary platform parts to your local machine)

    Sample:

    "runtimes": {
      "osx.10.11-x64": { },
      "win10-x64": { },
      "ubuntu.14.04-x64": { }
    }
    
  3. dotnet restore (to make sure the new runtimes are locally available).

  4. dotnet build (if not already done for the portable app)

  5. dotnet publish -r ubuntu.14.04-x64 (to bundle it up)

  6. See the result directory with a platform specific dotnet command able to run the app.

I followed the steps found in the .NET Core documentation.