XPath in MSBuild (SDC) und WIX
-
03-07-2019 - |
Frage
Frische Vorstellung dieser Frage ->
Ich habe eine WIX-Datei, die ich brauche, mit MSBuild zu ändern. Es beginnt wie folgt:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
<?--... Various Removed Params ...-->
<Product Id='$(var.ProductCode)'
UpgradeCode='$(var.UpgradeCode)'
Name='$(var.AppName)' Language="1033" Version='$(var.ProductVersion)'
Manufacturer='$(var.Manufacturer)'>
<Package Id='$(var.PackageCode)' InstallerVersion="200"
Compressed="yes" />
<?--... More of the WIX XML file ...-->
<iis:WebApplication Id='STWebApp' Name='MyWebSite' Isolation='medium' />
<?--... Rest of the WIX XML file ...-->
Mein Problem ist die DEZA Aufgaben können nicht von dem XML-Knoten zu verweisen scheinen, die WIX verwendet sind. Zum Beispiel:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="//iis:WebApplication" Namespaces="@(Namespaces)"
Name="Name" Value="$(VersionTag)"/>
funktioniert gut, weil es keine Wix Knoten verwenden ist (nur ein iis ein), aber wenn ich den vollen XPath Pfad zur Datei ( / Wix / Produkt / iis: WebApplication ) die Aufgabe, kehrt zurück: Ressource kann nicht Zeichenfolge Keine Treffer für XPath-Ausdruck gefunden finden
Das ist kein Problem, bis ich einen Verzeichnisknoten (/ Wix / Produkt / Verzeichnis / Verzeichnis / Verzeichnis / Verzeichnis [@ id = 'STWebSiteDir'])
verweisen möchtenIch habe versucht, die vollständige XPath und das kürzere // Verzeichnis mit [@ id = 'STWebSiteDir']. Ich habe einzelne und doppelte Anführungszeichen versucht, Ich habe versucht, den WIX Namespace auf den Aufruf Hinzufügen (ohne Präfix).
<ItemGroup>
<Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
<Prefix>iis</Prefix>
<Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
</Namespaces>
<Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">
<Prefix></Prefix>
<Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
</Namespaces>
</ItemGroup>
Ich habe versucht, auch bekommen nur einen Verweis auf / Wix / Produkt und auch das fehlschlägt:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="/Wix/Product" Namespaces="@(Namespaces)"
Name="Name" Value="MODIFIED"/>
Mir fehlt eindeutig etwas. Jeder mit einem Hinweis auf, wo dies gehen, um zu arbeiten?
Vaccano
Lösung
Können Sie definieren nur die Variablen in der Befehlszeile an den Präprozessor?
candle -dVariableName=ValueForVariable
Das könnte viel einfacher sein.
Andere Tipps
Haben Sie den Wix Standard-Namespace enthalten in @ (Namensräume)?
<ItemGroup>
<Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
<Prefix>iis</Prefix>
<Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
</Namespaces>
<Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">
<Prefix>wis</Prefix>
<Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
</Namespaces>
</ItemGroup>
Sie sollten auch ein Präfix für wi-Namespace hinzufügen, danach kann es ok, ich Test es haben.
OK, also hier ist die Antwort:
Der Namespacepräfix benötigte für den Wix Teil zu fehlen, nicht nur leer gelassen
<ItemGroup>
<Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
<Prefix>iis</Prefix>
<Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
</Namespaces>
<Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">
<Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
</Namespaces>
</ItemGroup>
Und dann müssen Sie einen Präfix Wert auf den Wix Namespace in der Datei hinzuzufügen. Ich benutzte tst.
Vaccano