Мы переносим наши текущие. Net сервисы Framework на. NET Core 3.x.
Текущий конвейер развертывания включает создание пакетов nuget с использованием nuget.exe и пользовательских файлов nuspe c.
Затем Octopus установит службу на удаленной машине.
Эти пакеты nuget содержат только все (файл .nuspe c):
<files>
<file src="AccountNode.WindowsService\bin\$configuration$\**\*.*"
exclude="**\*.pdb;**\*.xml" />
</files>
Я написал новые шаги проекта TeamCity для использования do tnet publi sh, test and pack.
Я не хочу использовать пользовательские файлы nuspe c.
Теперь моя проблема заключается в том, что создаваемые мной пакеты nuget не содержат. exe-файл, необходимый для запуска веб-службы.
Проект представляет собой рабочую службу: <Project Sdk="Microsoft.NET.Sdk.Worker">
, и я использую Microsoft.Extensions.Hosting.WindowsServices :
Host.CreateDefaultBuilder(args)
.UseWindowsService()
Я также использую <OutputType>Exe</OutputType>
или --runtime --win-x64
, поэтому у меня есть MyProject.dll и MyProject.exe в bin \ Release \ netcoreapp3.1 \ publi sh при сборке с :
dotnet publish MyProject/MyProject.csproj -c Release --runtime win10-x64
Затем я пытаюсь создать пакет nuget с:
* 102 7 *
или
dotnet pack -c Release MyProject/MyProject.csproj --runtime win10-x64
Как включить файл .exe в пакет nuget?
packOptions
требуется проект. json файл, не тот, который я хочу.
Итак, ранее пакеты nuget использовались так же, как и zip (версионные) файлы?
Оправдан ли этот подход или лучше использовать zip-файл; Я имею в виду, это "официальный способ" развертывания службы windows?
[Обновление]
Я использую этот обходной путь для повторного развертывания сервисы на удаленном сервере с Octopus.
Это соответствующая часть в файле проекта:
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<OutputType>Exe</OutputType>
<IsPackable>true</IsPackable>
</PropertyGroup>
<ItemGroup>
<Content Include="bin\Release\netcoreapp3.1\publish\**">
<Pack>true</Pack>
<PackagePath>windows-service</PackagePath>
</Content>
</ItemGroup>
(«**» требуется для включения папки «runtime».)
Практически я копирование аверифинга из папки «publi sh» в пользовательскую папку («windows -service»). Эта папка должна содержать папку «runtimes» (в папке «publi sh»).
На удаленной машине Octopus регистрирует серв ie (s c .exe), передавая путь к. exe внутри папки "windows -service".
Это работает, и мне нравится, что "грязная" часть - это простая и понятная инструкция внутри файла проекта, но, тем не менее, Я ищу лучшую практику для этого сценария.