MSBuild(SDC)およびWIXのXPath
-
03-07-2019 - |
質問
この質問の新しい質問->
MSBuildを使用して変更する必要があるWIXファイルがあります。次のように始まります:
<?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 ...-->
私の問題は、SDCタスクがWIX関連のxmlノードを参照できないように見えることです。例:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="//iis:WebApplication" Namespaces="@(Namespaces)"
Name="Name" Value="$(VersionTag)"/>
Wixノード(iisノードのみ)を使用しないため問題なく動作しますが、完全なXPathパス( / Wix / Product / iis:WebApplication )を使用するとタスク戻り値: XPath式に一致するリソース文字列が見つかりませんでした
これは、Directoryノード(/ Wix / Product / Directory / Directory / Directory / Directory [@ Id = 'STWebSiteDir'])を参照するまで問題ありません
完全なXPathと短い// Directory [@ Id = 'STWebSiteDir']を使用してみました。一重引用符と二重引用符を試しました。呼び出しにWIX名前空間を追加しました(プレフィックスなし)。
<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>
/ Wix / Productへの参照を取得しようとしても失敗します:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="/Wix/Product" Namespaces="@(Namespaces)"
Name="Name" Value="MODIFIED"/>
明らかに何かが欠けています。これを機能させるためにどこに行くべきかについてのヒントをお持ちですか?
バッカーノ
解決
プリプロセッサへのコマンドラインで変数を定義するだけですか?
candle -dVariableName=ValueForVariable
それははるかに簡単かもしれません。
他のヒント
@(Namespaces)にWixのデフォルト名前空間を含めましたか?
<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>
wi名前空間にもプレフィックスを追加する必要があります。その後、OKでテストできます。
OK、ここに答えがあります:
名前空間の接頭辞は、空のままにするだけでなく、wix部分で欠落する必要がありました
<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>
そして、ファイル内のwix名前空間にプレフィックス値を追加する必要があります。 tstを使用しました。
バッカーノ