Я создаю установщик WiX для приложения, используя прожиг и тип WixStandardBootstrapperApplication. Этот установщик устанавливает .NET 4.6.2, SQL Server, схему базы данных и приложение. Я почти уверен, что все, кроме приложения, работает, но я не могу проверить, потому что получаю следующую ошибку при сборке приложения MSI:
The File element contains an unhandled extension element 'Shortcut'.
Please ensure that the extension for elements in the '' namespace has been provided.
Теперь все, что я прочитал, говорит, что мне просто нужно добавить -ext ‹DLL для пространства имен› в команду сборки, и все получится. К сожалению, без указания пространства имен я не могу этого сделать.
Я создаю MSI в своем собственном проекте, подробности которого здесь (дезинфицированы):
Я создаю список компонентов через Heat.exe в событии перед сборкой. Вот эта команда:
"%WIX%bin\heat" dir "APPLICATIONDIR\bin\Release" -gg -cg Application32 -scom -sreg -sfrag -srd -dr INSTALLDIR -var "var.SourceDir" -t ../../Application.xslt -out "..\..\Fragments\Application.wxs"
Продукт.wxs:
<xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="Installer32"
Language="1033"
Version="1.0.0.0"
Manufacturer="Company Name"
UpgradeCode="YOURGUID-12D0-4836-99F0-CB0C14264423">
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine" />
<Media Id="1"
Cabinet="Application.cab" />
<Property Id="DISABLEADVTSHORTCUTS" Value="1" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Feature Id="ProductFeature"
Title="Installer32"
Level="1">
<ComponentGroupRef Id="Application32" />
<ComponentRef Id="ApplicationStartMenuShortcut"/>
</Feature>
</Product>
<Fragment>
<!-- ProgramFiles directory-->
<Directory Id="TARGETDIR"
Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="CompanyFolder"
Name="Company">
<Directory Id="INSTALLDIR"
Name="Application">
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="Product Name" />
</Directory>
</Directory>
</Fragment>
</Wix>
Приложение.xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="wix">
<xsl:output method="xml" indent="yes" />
<!-- This modifies the auto-generated Component for the executable to add shortcuts to start menu and desktop -->
<xsl:template match='wix:Wix/wix:Fragment/wix:DirectoryRef/wix:Component/wix:File[@Id and (@Id = "filAE9755507C00040964294096392BF6A2")]'>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<Shortcut Id="ApplicationDesktopShortcut"
Directory="ApplicationProgramsFolder"
Name="Application"
Advertise="yes" />
</xsl:copy>
</xsl:template>
<!-- Identity template: copies everything without change -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
РЕДАКТИРОВАТЬ: добавлен выход HEAT:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="INSTALLDIR">
[ SNIPPED MANY ]
<Component Id="cmpE60EA55C613C91D5119575B9B63102FB" Guid="{7A9A6D6D-960F-4ADB-8DC8-7A09FED71D48}">
<File Id="filAE9755507C00040964294096392BF6A2" KeyPath="yes" Source="$(var.SourceDir)\Application.exe"><Shortcut Id="ApplicationDesktopShortcut" Directory="ApplicationProgramsFolder" Name="Application" Advertise="yes" xmlns="" /></File>
</Component>
<Component Id="cmpA0604D18A00382A0CB4E004C7C2286DA" Guid="{538403B0-09ED-46C7-AD94-403C05ADAB56}">
<File Id="fil2F48795734FE3514952453321B4758C3" KeyPath="yes" Source="$(var.SourceDir)\Application.exe.config" />
</Component>
[ SNIPPED MANY ]
<Directory Id="dir43A0033346A51A6633F88C79EA143D36" Name="da">
<Component Id="cmp46F002450D6F653B36DCD369206685B4" Guid="{64EC22D1-B0ED-49E1-979E-7B8F54C558E3}">
<File Id="fil85957091B9F72CCAF0CF1D59748A6046" KeyPath="yes" Source="$(var.SourceDir)\da\Product.Utilities.resources.dll" />
</Component>
</Directory>
[ SNIPPED MANY ]
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="Application32">
[ SNIPPED MANY ]
<ComponentRef Id="cmpE60EA55C613C91D5119575B9B63102FB" />
<ComponentRef Id="cmpA0604D18A00382A0CB4E004C7C2286DA" />
[ SNIPPED MANY ]
<ComponentRef Id="cmp46F002450D6F653B36DCD369206685B4" />
[ SNIPPED MANY ]
</ComponentGroup>
</Fragment>
</Wix>
Единственный другой вопрос SO с пустым пространством имен: Миграция с WiX 3.10 на WiX 4.0: необработанный элемент расширения. Решение в этом не относится к этому вопросу, поскольку я не использую элемент реестра и не перехожу на WiX 4. Возможно, я использую другой элемент, который устарел, я не верю, что это так.
Буду признателен за любые подсказки относительно пути вперед. Спасибо.
xmlns="http://schemas.microsoft.com/wix/2006/wi"
к элементуxsl:stylesheet
, чтобы поместить элементShortcut
в правильное пространство имен. - person Daniel Haley   schedule 18.05.2017xmlns="http://schemas.microsoft.com/wix/2006/wi"
. Пространство имен, объявленное с префиксом, должно помочь вам сопоставить/выбрать элементы во входных данных.xmlns="http://schemas.microsoft.com/wix/2006/wi"
(пространство имен по умолчанию) будет использоваться в создаваемых вами элементах. - person Daniel Haley   schedule 18.05.2017