Wix의 새 네임스페이스에서 속성과 요소를 추가하고 Wix에서 무시하려면 어떻게 해야 하나요?
문제
Wix wxs 파일에 관련 없는 속성을 추가하고 Wix가 이를 무시하도록 하고 싶습니다.
현재 확장 프로그램을 찾는 동안 다음과 같은 오류가 발생합니다.
구성 요소 요소에 처리되지 않은 확장 속성 'myns:myattr'이 포함되어 있습니다.'http://tempuri.org/myschema.xsd' 네임스페이스가 제공되었습니다.
Rob, Bob 또는 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
(또는 봉헌으로 이에 상응하는 작업을 수행) 그런 다음 해당 항목의 모든 요소를 http://www.example.com
네임스페이스는 무시됩니다.
편집하다:어떤 요소라도 무시될 것이라고 말했을 때 나는 부정확했습니다.WIX XML 스키마를 사용하면 하위 요소를 바로 아래에 추가할 수 없습니다. WIX
요소.대부분의 다른 요소에서는 이를 허용합니다.텍스트를 찾아보세요 <xs:any namespace="##other" processContents="lax">
~에 c:\program files\windows installer xml v3\doc\wix.xsd
확장 지점을 찾으려면.