Как я могу добавить атрибуты и элементы из нового пространства имен в Wix и игнорировать Wix?

StackOverflow https://stackoverflow.com/questions/1803593

  •  05-07-2019
  •  | 
  •  

Вопрос

Я хочу добавить несвязанный атрибут в файл 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 в <=>, чтобы найти точки расширения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top