Подтвердить что ты не робот

Построение приложения .NET Core через командную строку, чтобы он работал на компьютере без установленного .NET Core

Моя конечная цель - создать кросс-платформенное (не web-приложение) консольное приложение, поэтому я сейчас изучаю .NET Core.

В моих предыдущих проектах .NET я сделал всю разработку внутри Visual Studio, но я также создал файл пакета /MSBuild, чтобы я мог построить весь проект (включая установки, пакеты NuGet, zip файлы с двоичными файлами и т.д.) с один клик. Вот пример из предыдущего проекта.

В конце концов, я хочу сделать что-то подобное с моим тестовым проектом .NET Core.
Но сейчас я не могу выполнить первый шаг: я не могу создать его за пределами Visual Studio, так что результат будет работать на другом компьютере под управлением Windows без установки .NET Core.
(на первом этапе я игнорирую кросс-платформенную часть - я буду рад заставить ее работать в Windows)


Что у меня

Мне удалось заставить его работать внутри Visual Studio 2015 Community Edition следующим образом:

Здесь мой тестовый проект на GitHub.

Когда я снова создаю "Build" ⇒ "Опубликовать" в меню, Visual Studio, по-видимому, снова запустит ранее созданный PowerShell script.
Результат чуть более 90 МБ, состоит из 825 файлов в 598 папках и выглядит примерно так:

Результат публикации Visual Studio

Когда я копирую его на другой компьютер (установлен Win 7/.NET 4/.NET Core не), он работает.


Что я попытался получить за пределами Visual Studio

1. dotnet publish

Этот ответ и этот ответ звучит так, как будто я могу использовать dnu publish для достижения того же результата через командной строки.
Я понимаю, что части .NET Core по-прежнему движутся цели прямо сейчас, поэтому очевидно dnu теперь dotnet вместо.

Итак, я попытался выполнить dotnet publish (и создал командный файл) для него:

dotnet publish "%~dp0\src\CoreTestVisualStudio" -c Release -r win7-x64 -o "%~dp0\release\cli"

Результат состоит из файла .exe и набора DLL, всего 25 файлов и 1,5 МБ, все в одной папке:

результат публикации dotnet

Очевидно, что среда выполнения .NET Core отсутствует здесь, и, как ожидалось, это приложение выходит из строя, когда я пытаюсь выполнить его на компьютере без установленной .NET Core (такой же, как указано выше).

2. The Powershell script из профиля публикации

Я попытался выполнить Powershell script (который был создан, когда я создал профиль публикации) за пределами Visual Studio, но он потерпел неудачу, потому что script ожидает некоторые параметры, и я не знаю, что передать:

param($publishProperties, $packOutput, $nugetUrl)

В этой строке также находится строка script:

# to learn more about this file visit http://go.microsoft.com/fwlink/?LinkId=524327

... но ссылка просто указывает на целевую страницу в блоге .NET Web Development and Tools.


TL; DR

Что я делаю неправильно?

Я знаю, что первый выпуск .NET Core в основном фокусируется на ASP.NET, но, как я понял, приложения ASP.NET Core просто консольные приложения, поэтому я подумал, что теперь будет работать базовое консольное приложение. < ш > С другой стороны, большая часть консольного приложения "начало работы" docs по-прежнему отсутствует, поэтому, возможно, это слишком рано и dotnet publish для консольные приложения еще не закончены?

Редактировать через несколько дней: я подозреваю, что я не делаю ничего плохого и что это проблема в инструментах командной строки .NET Core, поэтому я отправил его в средство отслеживания проблем командной строки.

4b9b3361

Ответ 1

Проблема решена!
Я разместил его на отслеживании проблем в инструментах командной строки .NET Core, и оказалось, что это была ошибка в dotnet publish - она ​​не связывает С++, которая необходима для выполнения скомпилированного приложения на компьютере без установки .NET Core.

Ответ 2

Для dnu:

Есть опция для dnu publish, называемая --runtime, которая указывает время выполнения, которое будет включено при публикации. Вы должны использовать полное имя времени выполнения с помощью команды, например:

dnu publish --runtime dnx-clr-win-x86.1.0.0-rc1

Для dotnet:

Вам не нужно указывать версии исполнения или фреймворка - по умолчанию dotnet publish будет использовать фреймворк с project.json и текущий вкус во время выполнения. Однако в документации указано, что:

Команда

dotnet-publish также требует определенных зависимостей в project.json для работы. А именно пакет Microsoft.NETCore.Runtime должен ссылаться как зависимость, чтобы команда могла скопировать файлы времени выполнения, а также файлы приложений в опубликованное местоположение.