.NET CLI, как запустить приложение после публикации в Linux

Я потратил около 4 часов на расследование и до сих пор не могу понять, как запустить опубликованное приложение ( dotnet publish )

Теперь я могу загрузить исходники на свою удаленную машину, а затем вызвать dotnet build и dotnet run, после чего мое приложение запустится, как задумано. Но я хочу публиковать только DLL (или *.so?) на свой VPS без исходных файлов.

Что говорится в официальных документах? Чтобы определить команду в project.json

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

Но это устарело, не так ли?

Как насчет образцов по умолчанию?

В примере решения VS2015 по умолчанию они используют publish-iis, полную платформу .NET и сервер IIS, но ничего не говорится о развертывании в Linux.

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

Вот моя информация о дотнете

.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


person Toddams    schedule 22.05.2016    source источник
comment
Вам нужно добавить RID в project.json в узле с именем runtimes. И публикация для него (не забудьте удалить type:platform из ваших зависимостей. dotnet.github.io/docs/core-concepts/app-types.html   -  person Thomas    schedule 22.05.2016
comment
dotnet publish -r ubuntu.14.04-x64 у меня работает.   -  person Thomas    schedule 22.05.2016


Ответы (1)


Выполните следующие шаги (начиная с переносного приложения RC2; обычного):

  1. Удалите аннотацию типа: платформа из всех ваших зависимостей (чтобы она фактически была автономной и больше не полагалась на установленную платформу .NET Core).

  2. Добавьте среду выполнения узла в ваш project.json (чтобы NuGet мог вытащить необходимые части платформы на ваш локальный компьютер).

    Образец:

    "runtimes": {
      "osx.10.11-x64": { },
      "win10-x64": { },
      "ubuntu.14.04-x64": { }
    }
    
  3. dotnet restore (чтобы убедиться, что новые среды выполнения доступны локально).

  4. dotnet build (если это еще не сделано для портативного приложения)

  5. dotnet publish -r ubuntu.14.04-x64 (чтобы связать это)

  6. См. результирующий каталог с командой dotnet для конкретной платформы, способной запустить приложение.

Я выполнил шаги, описанные в документации по .NET Core.

person Thomas    schedule 22.05.2016
comment
Хорошо, теперь у меня есть все эти файлы в папке публикации. Я загрузил эти файлы на свой сервер ubuntu и вызвал команду запуска dotnet, но до сих пор нет результата - я получаю ссылку на объект, не установленную на экземпляр объекта. Что я делаю не так? - person Toddams; 22.05.2016
comment
Вы звонили по месту? или ваша общая установка фреймворка? Не то чтобы это должно иметь значение. - person Thomas; 22.05.2016
comment
мой вопрос был больше: вы назвали это локально как ./dotnet run Foobar.dll или dotnet run Foobar.dll (точка - это разница;)) - person Thomas; 22.05.2016
comment
Спасибо, чувак, я не установил Foobar.dll в качестве параметра, это была проблема. Теперь это работает. Не могли бы вы рассказать мне, почему важно установить имя DLL, потому что запуск dotnet отлично работает на моем локальном dev. Окружающая среда - person Toddams; 22.05.2016
comment
Я думаю, что разница заключается в project.json, который локально является просто элементом для выполнения, а при компиляции вам нужно быть более явным. Я немного удивлен публикацией, что она не поставляется со сценарием оболочки, как раньше. Но эй, это превью1. - person Thomas; 22.05.2016
comment
Он производит вывод, аналогичный dnx, но только когда приложение является автономным. Если вы не видите этого в выходных данных публикации, возможно, вам все же придется внести некоторые изменения в ваш project.json, чтобы сделать приложение автономным, а не переносимым. - person Daniel Grim; 23.05.2016
comment
В NET .Core Final для запуска опубликованной DLL необходимо запустить ее с dotnet mydll.dll без ключевого слова run, см. информацию в официальной документации - docs.microsoft.com/en-us/dotnet/articles/core/tools/dotnet-run - person psulek; 29.06.2016
comment
@DanielGrim Я пытаюсь сделать то же самое, только для OSX. Знаете ли вы шаги или где я могу его найти, и мне нужно установить «ubuntu.14.04-x64» через nuget? На моем Mac после создания каталога для сохранения моего приложения, которое я только что создал/скопировал из Windows, мне нужно установить yoeman или что-то еще? Наконец, я выполню его, набрав «dotnet run» на своем Mac? Второй день пытаюсь разобраться. - person myfunnyfella; 23.08.2016
comment
Ссылка на документацию по .NET Core не работает. - person Tagc; 29.09.2016