Pergunta

Fresh Perguntando desta questão ->

Eu tenho um arquivo WIX que eu preciso modificar usando MSBuild. Começa assim:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">

  <?--... Various Removed Params ...-->

  <Product Id='$(var.ProductCode)'
    UpgradeCode='$(var.UpgradeCode)'
    Name='$(var.AppName)' Language="1033" Version='$(var.ProductVersion)'
    Manufacturer='$(var.Manufacturer)'>
    <Package Id='$(var.PackageCode)' InstallerVersion="200" 
    Compressed="yes" />

  <?--... More of the WIX XML file ...-->

  <iis:WebApplication Id='STWebApp' Name='MyWebSite' Isolation='medium' />

  <?--... Rest of the WIX XML file ...-->

O meu problema é que as tarefas SDC não consigo fazer referência a qualquer um dos nós XML que são WIX relacionados. Por exemplo:

<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
         XPath="//iis:WebApplication" Namespaces="@(Namespaces)" 
         Name="Name" Value="$(VersionTag)"/>

funciona muito bem porque ele não usa nenhum nó Wix (apenas uma iis um), mas se eu usar o caminho XPath completo para ele ( / Wix / produto / iis: WebApplication ) a tarefa retorna: Não foi possível encontrar seqüência de recurso encontrado nenhum resultado para a expressão XPath

Este não é um problema até que eu quero fazer referência a um nó Directory (/ Wix Produto / Diretório / Directório / Diretório / Directório / [@ id = 'STWebSiteDir'])

Eu tentei usar o XPath completo eo mais curto // Diretório [@ id = 'STWebSiteDir']. Eu tentei aspas simples e aspas duplas, Eu tentei adicionar o namespace WIX para a chamada (sem prefixo).

<ItemGroup>
  <Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
    <Prefix>iis</Prefix>
    <Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
  </Namespaces>
  <Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">
    <Prefix></Prefix>
    <Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
  </Namespaces>
</ItemGroup>

Eu até tentei apenas para obter uma referência a / Wix / produtos e até mesmo que falha:

<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs" 
            XPath="/Wix/Product" Namespaces="@(Namespaces)" 
            Name="Name" Value="MODIFIED"/>

Estou claramente faltando alguma coisa. Qualquer pessoa com uma dica sobre onde ir para chegar a este trabalho?

Vaccano

Foi útil?

Solução

É possível que você acabou de definir as variáveis ??na linha de comando para o pré-processador?

candle -dVariableName=ValueForVariable

Isso pode ser muito mais fácil.

Outras dicas

Você incluiu o namespace padrão Wix em @ (namespaces)?

<ItemGroup>
  <Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
    <Prefix>iis</Prefix>
    <Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
  </Namespaces>
  <Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">
     <Prefix>wis</Prefix>
    <Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
  </Namespaces>
</ItemGroup>

você deve adicionar um prefixo para namespace wi também, depois que ele pode ok, eu tenho testá-lo.

OK, então aqui está a resposta:

O prefixo namespace necessário para estar faltando para a parte wix, não apenas deixado vazio

<ItemGroup>
  <Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
    <Prefix>iis</Prefix>
    <Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
  </Namespaces>
  <Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">

    <Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
  </Namespaces>
</ItemGroup>

E então você precisa adicionar um valor de prefixo para o namespace Wix no arquivo. I tst usado.

Vaccano

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top