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

Я хочу добавить несвязанный атрибут в файл Wix WXS и хочу, чтобы Wix его игнорировал.

В настоящее время выдает следующее сообщение об ошибке при поиске расширения.

Элемент Component содержит необработанный атрибут расширения «myns: myattr». Убедитесь, что расширение для атрибутов в пространстве имен 'http://tempuri.org/myschema.xsd' предоставлено.

Роб, Боб или кто-либо из команды wix слушает !!:)

1 Ответ

1 голос
/ 27 ноября 2009

Напишите расширение 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, чтобы найти точки расширяемости.

...