XPath em MSBuild (SDC) e WIX
-
03-07-2019 - |
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
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