我想在Wix wxs文件中添加一个不相关的属性,并希望Wix忽略它。
当它寻找扩展时,它当前会抛出以下错误。
Component元素包含未处理的扩展属性'myns:myattr'。请确保已提供“http://tempuri.org/myschema.xsd”命名空间中属性的扩展名。
Rob,Bob或wix团队的任何人都在听!!:)
答案 0 :(得分:1)
Write a wix extension处理该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
如果您现在使用选项-ext mywixext.dll
编译wix源(或者在奉献中执行等效操作),则http://www.example.com
命名空间中的所有元素都将被忽略。
编辑:当我说任何元素都会被忽略时,我感到不精确。 WIX XML模式不允许您直接在WIX
元素下添加自己的子元素。大多数其他元素允许它。在<xs:any namespace="##other" processContents="lax">
中查找文本c:\program files\windows installer xml v3\doc\wix.xsd
以查找可扩展性点。