tag - merge svn
¿Cómo puedo excluir los archivos SVN de la cosecha con calor(WiX)? (3)
Obtiene el error de "símbolo no resuelto" porque filtra los elementos del Componente, pero deja los elementos de ComponentRef como están. Por lo tanto, esos elementos permanecen huérfanos y hacen referencia a elementos componentes faltantes. Esto queda atrapado por el compilador de WiX.
Como probablemente ya hayas adivinado, filtra los elementos correspondientes de ComponentRef también. Espero que esto ayude.
Odio prácticamente duplicar las preguntas existentes, pero las respuestas proporcionadas no han funcionado:
Así es como se ve mi .wxs:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="SDKCONTENTDIR">
<Directory Id="dirE2EC21E8B765C611E918FB22F30721D1" Name=".svn" />
<Directory Id="dir7DC42F44E7FE9E20277B180A353D0263" Name="bin" />
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="sdkContent">
<Component Id="cmp5E86312F0CA2C53B8173AECD6A428747" Directory="dirE2EC21E8B765C611E918FB22F30721D1" Guid="{E87F312D-9DA2-4A68-B6C5-BCE2FF90720C}">
<File Id="filB766A28A7577EB4311FD03CD707BC211" KeyPath="yes" Source="$(var.publishContentDir)/.svn/all-wcprops" />
</Component>
<Component Id="cmp6EF52B3E331F226299060D45F533DC07" Directory="dirE2EC21E8B765C611E918FB22F30721D1" Guid="{5EA6AB2D-20C3-4B07-8E0A-7C28135BE922}">
<File Id="fil83205196F05211A66F9D25A7A5496FBA" KeyPath="yes" Source="$(var.publishContentDir)/.svn/entries" />
</Component>
...
Estoy usando este código .xsl para excluir:
<xsl:key name="svn-search" match="wix:Component[ancestor::wix:Directory/@Name = ''.svn'']" use="@Id" />
<xsl:template match="wix:Directory[@Name=''.svn'']" />
<xsl:template match="wix:Component[key(''svn-search'', @Id)]" />
Pero recibo muchos errores de "Error 48 Referencia no resuelta al símbolo" ya que no elimina todos los elementos secundarios.
Ideas?
Esto es lo que obtuve trabajando:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
<!-- Copy all attributes and elements to the output. -->
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>
<xsl:output method="xml" indent="yes" />
<!-- Create searches for the directories to remove. -->
<xsl:key name="svn-search" match="wix:Directory[@Name = ''.svn'']" use="@Id" />
<xsl:key name="tmp-search" match="wix:Directory[@Name = ''tmp'']" use="@Id" />
<xsl:key name="prop-base-search" match="wix:Directory[@Name = ''prop-base'']" use="@Id" />
<xsl:key name="text-base-search" match="wix:Directory[@Name = ''text-base'']" use="@Id" />
<xsl:key name="props-search" match="wix:Directory[@Name = ''props'']" use="@Id" />
<!-- Remove directories. -->
<xsl:template match="wix:Directory[@Name=''.svn'']" />
<xsl:template match="wix:Directory[@Name=''props'']" />
<xsl:template match="wix:Directory[@Name=''tmp'']" />
<xsl:template match="wix:Directory[@Name=''prop-base'']" />
<xsl:template match="wix:Directory[@Name=''text-base'']" />
<!-- Remove Components referencing those directories. -->
<xsl:template match="wix:Component[key(''svn-search'', @Directory)]" />
<xsl:template match="wix:Component[key(''props-search'', @Directory)]" />
<xsl:template match="wix:Component[key(''tmp-search'', @Directory)]" />
<xsl:template match="wix:Component[key(''prop-base-search'', @Directory)]" />
<xsl:template match="wix:Component[key(''text-base-search'', @Directory)]" />
<!-- Remove DirectoryRefs (and their parent Fragments) referencing those directories. -->
<xsl:template match="wix:Fragment[wix:DirectoryRef[key(''svn-search'', @Id)]]" />
<xsl:template match="wix:Fragment[wix:DirectoryRef[key(''props-search'', @Id)]]" />
<xsl:template match="wix:Fragment[wix:DirectoryRef[key(''tmp-search'', @Id)]]" />
<xsl:template match="wix:Fragment[wix:DirectoryRef[key(''prop-base-search'', @Id)]]" />
<xsl:template match="wix:Fragment[wix:DirectoryRef[key(''text-base-search'', @Id)]]" />
</xsl:stylesheet>
Tuve la misma pregunta y encontré tu respuesta. Sin embargo, no estaba contento con la necesidad de especificar los subdirectorios de la carpeta .svn por nombre. Esto puede romperse si el directorio .svn cambia la estructura en el futuro, o si tengo un directorio llamado tmp a propósito ...
Cuando ejecuté su xsl contra mi xml, también noté que había algunos fragmentos de directorio dispersos. Al ser TOC y querer limpiar eso, noté que heat.exe tiene una opción para "suprimir fragmentos". El efecto real fue hacer que las etiquetas de Directorio realmente anidan una debajo de la otra, lo que hace que escribir un archivo xsl sea mucho más fácil.
Después de eliminar los directorios .svn de la estructura de etiquetas anidadas, todavía tenía un problema con ComponentRefs que apuntaba a identificadores de componentes que se habían eliminado junto con los directorios que los contenían. Como soy un novato xsl, tuve que investigar un poco, pero descubrí que podía usar "descendiente ::" en el atributo de uso de xsl: clave.
En resumen, aquí está mi solución. Tenga en cuenta que aún no he intentado construir el MSI con eso; eso llegará en un día o dos. Pero incluso si no es perfecto, al menos esto podría ayudar a otra persona con el mismo problema ...
Uso: heat.exe dir fuente -t excludesvn.xsl -sfrag -o archivos.wxs
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
<!-- Copy all attributes and elements to the output. -->
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>
<xsl:output method="xml" indent="yes" />
<!-- Search directories for the components that will be removed. -->
<xsl:key name="svn-search" match="wix:Directory[@Name = ''.svn'']" use="descendant::wix:Component/@Id" />
<!-- Remove directories. -->
<xsl:template match="wix:Directory[@Name=''.svn'']" />
<!-- Remove componentsrefs referencing components in those directories. -->
<xsl:template match="wix:ComponentRef[key(''svn-search'', @Id)]" />
</xsl:stylesheet>