Como posso adicionar atributos e elementos de um novo namespace na Wix e ignorado por Wix?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu quero adicionar um atributo relacionado no arquivo do Wix wxs e quer Wix ignorá-lo.

Atualmente, joga-se seguinte erro, uma vez que vai à procura para a extensão.

O elemento componente contém uma extensão sem tratamento 'myns: myattr' atributo. Certifique-se de que a extensão de atributos no ' http://tempuri.org/myschema.xsd ' namespace foi fornecido.

Rob, Bob ou alguém na escuta Equipe Wix !!:)

Foi útil?

Solução

Escrever um extensão wix que lida com elementos em que namespace XML. A extensão a seguir exemplo irá causar quaisquer elementos no http://www.example.com namespace para ser ignorado:

Salvar o seguinte código no 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
      }

   }
}

Agora, compilá-lo em mywixext.dll assim:

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

Se você agora compilar suas fontes da Wix com o -ext mywixext.dll opção (ou fazer o equivalente em votiva), então todos os elementos no namespace http://www.example.com serão ignorados.

Editar : Eu era imprecisa quando eu disse que qualquer elemento seria ignorado. O esquema XML WIX não permite que você adicione seus próprios elementos filhos diretamente sob o elemento WIX. A maioria dos outros elementos permitem. Procure o <xs:any namespace="##other" processContents="lax"> texto em c:\program files\windows installer xml v3\doc\wix.xsd para encontrar os pontos de extensibilidade.

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