2016-03-23 14 views
3

質問:XMLファイル内の特定の属性をFAKEで設定するにはどうすればよいですか?FAKEを使用してXMLファイルを操作する

私は、FAKEの助けを借りてWindows Phone 8.1プロジェクトを構築したいと考えています。バージョンタグはビルドスクリプトのパラメータです。タグがすでにassemply情報に焼かれる:Package.appxmanifest:

let version = getBuildParamOrDefault "version" "0.0.0.1" 

Target "AssemblyInfo" (fun _ -> 
    CreateCSharpAssemblyInfo "./src/SharedAssemblyInfo.cs" 
     [ 
      Attribute.Product  product 
      Attribute.Version  version 
      Attribute.FileVersion version 
      Attribute.Metadata ("githash", commitHash) 
     ] 
) 

バージョン情報が含まれているWindows Phoneの8.1プロジェクト内の他のファイルがあります。

<?xml version="1.0" encoding="utf-8"?> 
<Package ...> 

    <Identity Name="..." Publisher="..." Version="1.0.0.0" /> 

    ... 

</Package> 

アイデンティティタグのVersion属性の値を変更したいとします。ビルドパラメータとして指定されたversionタグを含める必要があります。私は名前を「AppxManifest」と別のターゲットでそれをやりたいと、それはアセンブリ情報ファイルを操作した後が、MSBuildのビルドが実行される前に実行する必要があります

Target "AppxManifest" (fun _ -> 

    ??? 

) 

"Clean" 
==> "RestorePackages" 
==> "AssemblyInfo" 
==> "AppxManifest" 
==> "Build" 

私はFAKEのドキュメントにXMLHelperを発見しました(http://fsharp.github.io/FAKE/apidocs/fake-xmlhelper.html)これは仕事をすることができるように見えます。しかし例はありません。私はそれをする方法を理解できませんでした。

答えて

2

XMLHelperライブラリを使用してXMLファイルを操作できます。関数XmlPokeを使用すると、XMLファイルの要素をXPath式で参照して要素を変更することができます。 Package.appxmanifestファイルには名前空間が含まれているため、名前空間を適切に処理できるXmlPokeNS関数を使用する必要があります。

最後の問題は、Package.appxmanifestのデフォルト名前空間です。デフォルトの名前空間に関連付けるプレフィックスを指定する必要があります。 XPath式では、この接頭辞を使用してXML要素を参照します。

特別なプレフィックス文字列はありません。必要なものを自由に選択できます。この例では、接頭辞「df」を選択します。

open Fake.XMLHelper 

Target "PackageAppxmanifest" <| fun _ -> 
    let file = "<path to Package.appxmanifest>" 
    let ns = [ "df", "http://schemas.microsoft.com/appx/2010/manifest" ] 
    let xpath = @"df:Package/df:Identity/@Version" 
    XmlPokeNS file ns xpath version 
関連する問題