Чтобы создать 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>