Как я могу добавить атрибуты и элементы из нового пространства имен в Wix и игнорировать Wix?
Вопрос
Я хочу добавить несвязанный атрибут в файл Wix WXS и хочу, чтобы Wix его игнорировал.
В настоящее время выдает следующее сообщение об ошибке при поиске расширения.
Элемент Component содержит необработанный атрибут расширения «myns: myattr». Убедитесь, что расширение для атрибутов в http://tempuri.org/myschema.xsd . пространство имен предоставлено.
Роб, Боб или кто-нибудь из команды wix слушает !! :)
Решение
Написать расширение 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), тогда все элементы в пространстве имен WIX
будут игнорироваться.
edit : я был неточен, когда сказал, что любой элемент будет игнорироваться. XML-схема WIX не позволяет добавлять собственные дочерние элементы непосредственно под элемент <xs:any namespace="##other" processContents="lax">
. Большинство других элементов позволяют это. Найдите текст c:\program files\windows installer xml v3\doc\wix.xsd
в <=>, чтобы найти точки расширения.