Создать msi из asp.net web api core 2.0 project - PullRequest
0 голосов
/ 01 июня 2018

Я создаю проект ASP.net core 2.0 WEB API, который требуется развернуть в качестве службы Windows в системе с использованием установки MSI.Есть ли способ, которым я могу это сделать?

Вещи, которые я уже пробовал:

  1. Я создал MSI, используя Setup Project, но он не загружает никаких зависимостей.

  2. Я пытался создать MSI, используя WIX , но он показывает ошибку Для сборки необходимо установить инструменты сборки WiX Toolset v3.11 (или новее)этот проект Я пробовал решение, на которое уже дан ответ это и это .

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Я решил это, создав MSI с помощью Wix.Я посмотрел это видео и следовал его инструкциям.

  • Для создания службы Windows я использовал NSSM, я скопировал nssm.exe как часть установщика.использовал следующую команду: nssm install service-name

  • Для автоматического создания сервиса я использовал CustomAction от WiX.

0 голосов
/ 12 декабря 2018

Чтобы создать MSI для .Net core 2… сначала опубликуйте свой проект как

dotnet publish --configuration Release --runtime win7-x64 --self-contained false --output c:\outputfolder

. Вы можете сделать его частью вашего .wixproj, добавив

 <Target Name="BeforeBuild">
    <PropertyGroup>
      <BasePath>$(SolutionDir)\publish\bin\$(Configuration)\FilesToPackage</BasePath>
    </PropertyGroup>
    <!-- Clean previous build folder -->
    <Exec Command="rd /s /q $(BasePath)" />

    <!-- Publish dotnet core app -->
    <Exec Command="dotnet publish $(MSBuildThisFileDirectory)\..\..\src\yourproject.csproj -r win-x64 --self-contained false --output $(BasePath)" />

    <!-- Get assembly version -->
    <GetAssemblyIdentity AssemblyFiles="$(BasePath)\yourproject.dll">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
    </GetAssemblyIdentity>

    <!-- Define some variables we need -->
    <PropertyGroup>
      <DefineConstants>ProductVersion=%(AssemblyVersion.Version);BasePath=$(BasePath)</DefineConstants>
    </PropertyGroup>

    <HeatDirectory 
      OutputFile="YourServiceComponent.wxs" 
      DirectoryRefId="INSTALLFOLDER" 
      ComponentGroupName="yourproject_component"
      SuppressCom="true" Directory="$(BasePath)"
      SuppressFragments="true"
      SuppressRegistry="true"
      SuppressRootDirectory="true"
      AutoGenerateGuids="false"
      GenerateGuidsNow="true"
      ToolPath="$(WixToolPath)"
      PreprocessorVariable="var.BasePath"
      Transforms="RemoveFiles.xslt" 
      />
  </Target>

. Heat создастфайл wxs со всеми файлами из вывода, но вам необходимо удалить yourservice.exe, поэтому добавьте эту информацию в RemoveFiles.xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
  <xsl:output method="xml" indent="yes" />
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:key name="pdb-search" match="wix:Component[contains(wix:File/@Source, '.pdb')]" use="@Id" />
  <xsl:template match="wix:Component[key('pdb-search', @Id)]" />
  <xsl:template match="wix:ComponentRef[key('pdb-search', @Id)]" />

  <xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, 'Your.Service.exe')]" use="@Id"/>
  <xsl:template match="wix:Component[key('service-search', @Id)]"/>
  <xsl:template match="wix:ComponentRef[key('service-search', @Id)]"/>
</xsl:stylesheet>

Наконец, вы хотите, чтобы Wix зарегистрировал вашу службу в диспетчере управления службами Windows (SCM).) поэтому добавьте следующее в ваш Product.wxs

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <ComponentGroupRef Id="yourproject_component" />

      <Component Id="ServiceAssemblyComponent" Guid="{GUID}">
        <File Id="ServiceAssembly" Source="$(var.BasePath)\Your.Service.exe" KeyPath="yes" />
        <ServiceInstall Id="ServiceInstallation" DisplayName="$(var.ProductName)" Name="$(var.ProductName)" ErrorControl="normal" Start="auto" Type="ownProcess"  Vital="yes" />
        <ServiceControl Id="ServiceControl" Name="$(var.ProductName)" Stop="both" Remove="uninstall" />
      </Component>
    </ComponentGroup>
  </Fragment>
0 голосов
/ 01 июня 2018

Недостаточно времени, просто несколько ссылок, чтобы увидеть, как это работает:

По существу:

  1. Вам необходимо загрузить и установить Инструментарий WiX для запуска WiX.
  2. Если вы хотите работать с исходными файлами WiX в Visual Studio, вы также должны получить Расширение Visual Studio (в дополнение косновная загрузка WiX).
  3. Загрузите их отсюда : http://wixtoolset.org/releases/

Я хочу добавить папку bin в основном каталоге установки WiX в переменную среды Path дляиметь возможность вызывать инструменты сборки WiX - candle.exe, light.exe, etc... - из любого места.

Вы также можете компилировать исходные файлы WiX вне Visual Studio.В простейшем виде:

set SetupName=MySetup

candle.exe %SetupName%.wxs >> %SetupName%.log
light.exe -out %SetupName%.msi %SetupName%.wixobj >> %SetupName%.log

Или без шума линии:

candle.exe Setup.wxs
light.exe -out Setup.msi Setup.wixobj

Похожие вопросы:

...