¿Cómo puedo agregar atributos y elementos de un nuevo espacio de nombres en Wix e ignorado por Wix?

StackOverflow https://stackoverflow.com/questions/1803593

  •  05-07-2019
  •  | 
  •  

Pregunta

Quiero agregar un atributo no relacionado en el archivo Wix wxs y quiero que Wix lo ignore.

Actualmente arroja el siguiente error a medida que busca la extensión.

El elemento Componente contiene un atributo de extensión no manejado 'myns: myattr'. Asegúrese de que la extensión de los atributos en ' http://tempuri.org/myschema.xsd ' se ha proporcionado espacio de nombres.

¡Rob, Bob o cualquiera en el equipo de wix escuchando! :)

¿Fue útil?

Solución

Escribe una extensión wix que maneja elementos en ese espacio de nombres XML. La siguiente extensión de ejemplo hará que se ignore cualquier elemento en el espacio de nombres http://www.example.com:

Guarde el siguiente código en mywixext.cs:

using System.Xml.Schema;
using Microsoft.Tools.WindowsInstallerXml;
using System.Xml;

[assembly: AssemblyDefaultWixExtension(
   typeof(mywixext.IgnoreNamespaceWixExtension))]

namespace mywixext
{

   public class IgnoreNamespaceWixExtension : WixExtension
   {
      public override CompilerExtension CompilerExtension
      {
         get
         {
            return new IgnoreNamespaceCompilerExtension();
         }
      }
   }

   public class IgnoreNamespaceCompilerExtension : CompilerExtension
   {
      public override XmlSchema Schema
      {
         get
         {
            return new XmlSchema() 
            {
               TargetNamespace = "http://www.example.com" 
            };
         }
      }

      public override void ParseElement(
         SourceLineNumberCollection sourceLineNumbers,
         XmlElement parentElement, XmlElement element,
         params string[] contextValues)
      {
         // do nothing
      }

   }
}

Ahora compílelo en mywixext.dll así:

"c:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe" /t:library ^
/r:"c:\program files\windows installer xml v3\bin\wix.dll" ^
mywixext.cs

Si ahora compila sus fuentes de wix con la opción -ext mywixext.dll (o hace el equivalente en votivo), todos los elementos en el espacio de nombres WIX serán ignorados.

edit : Fui impreciso cuando dije que cualquier elemento sería ignorado. El esquema WIX XML no le permite agregar sus propios elementos secundarios directamente debajo del elemento <xs:any namespace="##other" processContents="lax">. La mayoría de los otros elementos lo permiten. Busque el texto c:\program files\windows installer xml v3\doc\wix.xsd en <=> para encontrar los puntos de extensibilidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top