Установщик WiX 3.11: элемент содержит необработанный элемент расширения с пустым пространством имен.

Я создаю установщик 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. Возможно, я использую другой элемент, который устарел, я не верю, что это так.

Буду признателен за любые подсказки относительно пути вперед. Спасибо.


person Bill Fisher    schedule 18.05.2017    source источник
comment
Я запустил wixcop на моем wxs. Он жаловался только на форматирование моего кода. Нет устаревших элементов.   -  person Bill Fisher    schedule 18.05.2017
comment
Попробуйте добавить xmlns="http://schemas.microsoft.com/wix/2006/wi" к элементу xsl:stylesheet, чтобы поместить элемент Shortcut в правильное пространство имен.   -  person Daniel Haley    schedule 18.05.2017
comment
Не могли бы вы также ввести wxs от тепловыделения?   -  person Brian Sutherland    schedule 18.05.2017
comment
Я займусь xmlns. Я отредактирую в исходном вопросе тепловую мощность   -  person Bill Fisher    schedule 18.05.2017
comment
Обновлено с выходом тепла ... Я отредактировал около 100 лишних строк. Я заметил, что на вкладке «Ярлык» есть xmlns=, что, вероятно, является проблемой. Но это автоматически генерируется программойheat.exe.   -  person Bill Fisher    schedule 18.05.2017
comment
Нет, не удаляйте префикс wix! Просто добавьте дополнительный xmlns="http://schemas.microsoft.com/wix/2006/wi". Пространство имен, объявленное с префиксом, должно помочь вам сопоставить/выбрать элементы во входных данных. xmlns="http://schemas.microsoft.com/wix/2006/wi" (пространство имен по умолчанию) будет использоваться в создаваемых вами элементах.   -  person Daniel Haley    schedule 18.05.2017
comment
Все, что я читал, говорит о том, что мне просто нужно добавить -ext ‹DLL для пространства имен› в команду сборки... а вы? Рассматриваемая DLL — wix.dll. Ярлык определен в пространстве имен Microsoft.Tools.WindowsInstallerXml.Serialize в этой dll. Код сериализатора указывает, что ярлык находится в этом пространстве имен... Пробовал?   -  person    schedule 18.05.2017
comment
@Will Я почти уверен, что пробовал. Не гарантируя это. Я попробую снова. Прямо сейчас на совещании, так что обновления будут минимум через полчаса.   -  person Bill Fisher    schedule 18.05.2017
comment
В стороне отслеживается другая ошибка сборки: «Задача WixAssignCulture не найдена». Расследование этого.   -  person Bill Fisher    schedule 18.05.2017
comment
stackoverflow.com/questions/35132076 /   -  person    schedule 18.05.2017
comment
@Will Да, нашел. Прекрасное сообщение об ошибке, связанное с этим: Ваш системный администратор отключил функции Windows.   -  person Bill Fisher    schedule 18.05.2017
comment
Если у вас 2017, то можете попробовать добавить через установщик. Нажмите «Изменить», затем на вкладке «Отдельные компоненты» попробуйте добавить инструменты разработки .NET Framework 3.5 (второй сверху на этой вкладке).   -  person    schedule 18.05.2017
comment
Ну, конечно, к вашему wxs претензий нет. Оскорбительный элемент там не появляется. Он создается во время XSLT-преобразования.   -  person John Bollinger    schedule 18.05.2017
comment
Похоже, переустановка WiX 3.11 и перезагрузка решили проблему WixAssignCulture. И похоже, что я, возможно, решил проблему xmlns с предложением @DanielHaley поместить xmlns=.... в xsl:stylesheet. Определю после того, как исправлю эту ошибку ICE.   -  person Bill Fisher    schedule 18.05.2017
comment
Спасибо всем за вашу помощь.   -  person Bill Fisher    schedule 18.05.2017


Ответы (1)


Попробуйте добавить xmlns="http://schemas.microsoft.com/wix/2006/wi" к элементу xsl:stylesheet, чтобы поместить элемент Shortcut в правильное пространство имен.

Это должно выглядеть так...

<xsl:stylesheet version="2.0"
  xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
  xmlns="http://schemas.microsoft.com/wix/2006/wi"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  exclude-result-prefixes="wix">
person Daniel Haley    schedule 18.05.2017