Напишите расширение wix , которое обрабатывает элементы в этом пространстве имен XML. В следующем примере расширения будут игнорироваться любые элементы в пространстве имен http://www.example.com
:
Сохраните следующий код в 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
}
}
}
Теперь скомпилируйте его в mywixext.dll
так:
"c:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe" /t:library ^
/r:"c:\program files\windows installer xml v3\bin\wix.dll" ^
mywixext.cs
Если вы теперь скомпилируете исходные тексты wix с параметром -ext mywixext.dll
(или сделаете эквивалент в votive), тогда все элементы в пространстве имен http://www.example.com
будут игнорироваться.
edit : Я был неточен, когда сказал, что любой элемент будет игнорироваться. XML-схема WIX не позволяет добавлять собственные дочерние элементы непосредственно под элемент WIX
. Большинство других элементов позволяют это. Найдите текст <xs:any namespace="##other" processContents="lax">
в c:\program files\windows installer xml v3\doc\wix.xsd
, чтобы найти точки расширяемости.