Как развернуть рабочую службу. NET Core 3.x с TeamCity + Octopus? - PullRequest
0 голосов
/ 06 февраля 2020

Мы переносим наши текущие. 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".

Это работает, и мне нравится, что "грязная" часть - это простая и понятная инструкция внутри файла проекта, но, тем не менее, Я ищу лучшую практику для этого сценария.

...