Como posso adicionar atributos e elementos de um novo namespace na Wix e ignorado por Wix?
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 !!:)
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.