У меня Visual Studio 2017 15.8.7 установлен в Windows 10 с .NET Core SDK v2.1.403. Я пытаюсь создать автономное развертывание для основного консольного приложения dotnet. Когда Visual Studio публикует приложение, он создает каталог публикации и каталог win-x64, и я не уверен, какой из них является правильным каталогом для развертывания моего консольного приложения.
Я слежу за документация по развертыванию основного приложения dotnet. Вот содержимое моего файла .pubxml:
<?xml version = "1.0" encoding = "utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion = "4.0" xmlns = "http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishProtocol>FileSystem</PublishProtocol>
<Configuration>Debug</Configuration>
<Platform>Any CPU</Platform>
<TargetFramework>netcoreapp2.1</TargetFramework>
<PublishDir>bin\Debug\netcoreapp2.1\publish\</PublishDir>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>true</SelfContained>
<_IsPortable>false</_IsPortable>
</PropertyGroup>
</Project>
В документации сказано, что вывод будет помещен в PublishDir
, который я установил как bin\Debug\netcoreapp2.1\publish\
. Когда я публикую приложение, я вижу два каталога в bin\Debug\netcoreapp2.1
- каталог публикации и каталог win-x64. В каталоге win-x64 гораздо меньше элементов, чем в каталоге публикации; только результаты моего проекта, файл .exe для моего приложения и следующие файлы: hostfxr.dll
, hostpolicy.dll
и <myappname>.deps.json
. В каталоге публикации есть все эти файлы плюс еще много dll; вроде того, что я ожидал от автономного развертывания.
В чем разница между этими двумя каталогами?
В документации говорится:
Note that each target location (in the case of our example, bin\release\netcoreapp2.1\publish\ profile-name contains the complete set of files (both your app files and all .NET Core files) needed to launch your app.
У меня есть каталог публикации, настроенный в качестве целевого местоположения, так откуда берется win-x64? Есть ли у него минимум файлов, необходимых для запуска приложения или чего-то еще? Когда я пытаюсь запустить файл .exe в каталоге win-x64, кажется, что консольное приложение работает нормально. Я пытаюсь понять, нужно ли мне использовать содержимое каталога публикации или каталога win-x64. Я искал на сайте документации и на других сайтах в Интернете, но я не могу найти четкого объяснения того, почему создаются два выходных каталога. Есть заметная разница в размерах, поэтому, если мне удастся обойтись без win-x64, это будет здорово. Я просто не уверен, что это правильный каталог.
Это то, что я подумал сначала, но в каталоге win-x64 есть файл .exe. Мне не нужно использовать dotnet MyApp.dll
для запуска. Я могу запустить файл MyApp.exe
напрямую. Это заставляет меня задуматься, является ли это также каталогом вывода.
Это также зависит от ваших вариантов сборки и целевой платформы. В любом случае, публикация напрямую включает все файлы, необходимые для вашего приложения (включая NET Core). Например, для Win IoT Release папка не содержит исполняемых файлов, и вам необходимо изменить некоторые настройки в файле конфигурации, чтобы напрямую опубликовать exe. На самом деле, если ваша целевая платформа только на ПК с Windows, вы можете игнорировать каталог публикации.
@ greyseal96 Привет, дружище. Какая у этого цель? Благодаря этому вы можете сохранить работоспособность ядра .n - сделать свой веб-API доступным, не публикуя его в IIS?
Если вы собираетесь развертывать автономный, вам необходимо использовать содержимое вашего каталога публикации. Папка win-x64 - это подмножество каталога публикации, содержащего файлы времени выполнения, отличные от .Net Core (в основном файлы, относящиеся только к вашему коду).
Смысл развертывания автономный состоит в том, чтобы управлять основной средой выполнения .net вашего приложения, а не полагаться на среду выполнения на целевой машине. Если вы выберете среду выполнения win-x64 и сделаете selfconolated = false, вы увидите, что исполняемый не создается.
Обычно каталог x64 содержит только библиотеки DLL вашего проекта. Ваше приложение также встроено в DLL. Чтобы запустить его в целевой системе, вам нужно выполнить некоторую команду. Каталог публикации, в зависимости от параметров публикации, содержит все файлы, необходимые для работы, включая (не всегда) exe-файл, который можно легко запустить в целевой системе.