Побудуйте файл .exe у .NET Core RC2


77

Кожного разу, коли я будую проект, використовуючи нові шаблони .NET Core RC2, я не маю можливості для запуску. Файл EXE . Якщо я натиснув F5 для налагодження мого консольного додатка, він добре працює через

C:\Program Files\dotnet\dotnet.exe 

застосування. І якщо я використовую

dotnet run 

команда в папці, вона також працює нормально. Але я не бачу можливості запустити програму без інструментів CLI .NET Core.

Зміст мого

 bin\Debug\netcoreapp1.0\

папка виглядає так:

Структура папки bin

Як бачите, немає. Файл EXE доступний. Просто dll.

Я щось пропускаю? Або щось не так з моїм файлом project.json?

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

Дякую!


@DavidPine Відповідь там на використання compilationOptions застаріла в RC2. Я все-таки спробував, і це дало той самий результат.
Йоганнес Хестерман

Ви маєте рацію, вибачте за це. Це повинно бути, buildOptionsі у вас вже є те, "emitEntryPoint": trueщо має зробити трюк. Ви намагалися запустити вручну dotnet buildіз вікна рядка cmd ? Крім того, ви впевнені, що шукаєте в правильному вихідному каталозі?
Девід Пайн

@DavidPine Так, я спробував побудувати, запустити та опублікувати команди. Всі вони працюють нормально. Я просто не отримую файл .exe у своїй папці bin або будь-якій базовій папці.
Йоганнес Хестерман

Ви повинні запустити netcoreapp1.0 з "dotnet yourfile.dll", я думаю. Ну, це працює для мене як на вікнах, так і на WSL цілком добре.
Феліпе

Відповіді:


73

Насправді в .NET Core є 2 моделі додатків:

  • Портативні програми : натхненні "консольними програмами DNX", ці програми не створюють .exeфайли, а виконуються спільним середовищем виконання .NET Core (версія якого визначається Microsoft.NETCore.Appпакетом завдяки своєму спеціальному type: platformатрибуту). Щоб мати можливість користуватися портативними програмами, на машині має бути встановлено відповідне середовище виконання .NET Core. Якщо точної версії не вдається знайти, під час запуску виникає виняток dotnet run.

  • Автономні програми : автономні програми насправді схожі на старі добрі консольні програми .NET, оскільки створюють .exeфайли. Час виконання .NET Core не потрібно встановлювати на машині, оскільки воно безпосередньо вбудоване в саму програму.

Зараз ви використовуєте першу модель. Щоб використовувати автономну модель, потрібно налаштувати project.json:

  • Додайте runtimesрозділ, щоб перерахувати середовища, на які орієнтована ваша програма (наприклад,win7-x64 або ubuntu.14.04-x64). Повний список можна знайти тут .
  • Видаліть Microsoft.NETCore.App залежність. Ви можете замінити його на цей пакет замість: "NETStandard.Library": "1.5.0-rc2-24027".

Ось приклад автономної програми:

{
  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "warningsAsErrors": true
  },

  "dependencies": {
    "Microsoft.Extensions.Configuration.Binder": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "NETStandard.Library": "1.5.0-rc2-24027"
  },

  "frameworks": {
    "net451": { },

    "netcoreapp1.0": {
      "dependencies": {
        "System.Net.Ping": "4.0.0-rc2-24027"
      },

      "imports": [
        "dnxcore50",
        "dotnet5.6",
        "portable-net451+win8"
      ]
    }
  },

  "runtimes": {
    "win7-x64": { }
  }
}

2
Це воно! Дякую!
Йоганнес Хестерман

Чи можете ви пояснити, чи netcoreapp1.0потрібен / не потрібен розділ фреймворків? Тобто ви перерахували System.Net.Pingяк залежність - чи можна це перемістити до раніше визначеного dependenciesрозділу?
вівторок

3
Жодна з цих моделей додатків не створює жодного .exe - я думаю, це можливо лише на повному .NET Framework?
Роман Старков

@romkyns єдиний .exe? Ви маєте на увазі без будь-якого .dll?
Kévin Chalet

@Pinpoint - чудове пояснення. У вашому посиланні на документи MS також вказано час роботи Linux (наприклад, debian.8-x64). Чи можна їх створити як самостійні програми?
Alien Technology

13

Відповідь - у документації з повними кроками зараз.

Ви можете створити два типи розгортання для програм .NET Core:

  1. Розгортання, залежне від фреймворку
  2. Автономне розгортання

Для файлу .EXE, який можна запустити, слід використовувати автономну публікацію .


9

Для створення запущеної програми з консольної програми .NET Core ви можете використовувати інструмент dotnet . Просто запустіть у своєму каталозі проекту:

dotnet publish --runtime win7-x64

Це створює автономну програму (автономне розгортання; включає всі необхідні бібліотеки, що споживають на вашому диску щонайменше 60 МБ). Звичайно, ви також можете вибрати інші режими виконання, наприклад osx.10.11-x64або ubuntu.16.04-x64.

Якщо ви використовували конфігурацію за замовчуванням ( New Project -> Console App (.NET Core)), жоден модифікаційний файл конфігурації не потрібен.


4

Крок 1: Видаліть "type": "platform",із Project.json у frameworksрозділі

Крок 2: Додайте розділ про час виконання до вашого project.json. Зверніть увагу, що кожен розділ відокремлюється комою. Додайте час роботи. нижче - лише приклад виграшу 10.

"runtimes": {
       "win10-x64": {}      
     }

Крок 3: Команда відновлення dotnet у вашому проекті. (відкрийте cmd, перейдіть до папки проекту, де є папка src, запустіть dotnet restor)

крок 4: dotnet pack крок 4: dotnet build -r win10-x64- або просто побудуйте.

Крок 5: Ви можете помітити .exe, створений під налагодженням / netcore / win10 /


2

У ASP.NET Coreпоміняють свій додаток typeдо defaultв project.json:

"Microsoft.NETCore.App": {
  "type": "default",
  "version": "1.0.0-*"
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.