2009-05-04 71 views
0

新問的問題 - >MSBuild中的XPath(SDC)和WIX

我有一個WIX文件,需要使用MSBuild進行修改。它開始是這樣的:

<?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任務似乎無法引用任何屬於維克斯相關的XML節點。例如:

<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs" 
     XPath="//iis:WebApplication" Namespaces="@(Namespaces)" 
     Name="Name" Value="$(VersionTag)"/> 

作品就好了,因爲它不使用任何維克斯節點(只是一個IIS之一),但如果我使用完整的XPath路徑它(/維克斯/產品/ IIS:WebApplication的)任務回報: 找不到資源字符串發現XPath表達式

沒有比賽這不是一個問題,直到我想引用一個目錄節點(/維克斯/產品/目錄/目錄/目錄/目錄[@ Id ='STWebSiteDir'])

I嘗試使用完整的XPath和更短的目錄[@ 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> 

我甚至想先手/維克斯/產品的參考,甚至失敗:

<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs" 
      XPath="/Wix/Product" Namespaces="@(Namespaces)" 
      Name="Name" Value="MODIFIED"/> 

我清楚地失去了一些東西。任何人有什麼暗示去哪裏去得到這個工作?

Vaccano

+0

如果您的XPath引擎是standar抱怨,這是常見問題解答:沒有前綴的QName測試選擇null(或空)名稱空間URI中的元素,而不是默認名稱空間中的元素。因此,您需要註冊命名空間URI和前綴綁定,並將此前綴添加到您的路徑中,即:'/ wi:Wix/wi:Product' – 2010-11-24 21:11:33

回答

3

你可以在命令行中定義變量給預處理器嗎?

candle -dVariableName=ValueForVariable 

這可能會容易得多。

1

已包含在@(命名空間)的維克斯默認命名空間?

+0

我不能理解你,因爲我的問題中有WIx命名空間! ! – Vaccano 2009-05-04 21:31:35

+0

我沒有足夠的積分,否則我會投你一票。 – Vaccano 2009-05-04 22:08:09

+0

所以你下面的解決方案就是我試圖說的。默認值與「空」不同。 – 2009-05-04 22:37:52

0

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。

Vaccano

1
<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命名空間添加一個前綴,之後它就可以了,我已經測試了它。