2016-03-23 16 views
3

Soru: FAKE ile bir XML dosyasında belirli bir özniteliği nasıl ayarlayabilirim?FAKE ile bir XML dosyasını işlemek

FAKE yardımıyla bir Windows Phone 8.1 projesi oluşturmak istiyorum. Sürüm etiketi, yapım komut dosyasının bir parametresidir. etiket zaten assemply bilgi içine pişirilir: sürüm bilgilerini içeren bir Windows Phone 8.1 projede başka bir dosya vardır

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) 
     ] 
) 

: Package.appxmanifest.

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

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

    ... 

</Package> 

Kimlik etiketinin Sürüm özniteliğinin değerini değiştirmek istiyorum. Yapı parametresi olarak verilen sürüm etiketini içermelidir. Ben adı "AppxManifest" ayrı bir hedefte yapmak istiyorum ve onu montaj bilgisi dosyası manipüle sonra çalıştırmak gerekir ama MSBuild inşa çalıştırılmadan önce:

Target "AppxManifest" (fun _ -> 

    ??? 

) 

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

Ben sahte belgelerde bir XMLHelper bulduk (http://fsharp.github.io/FAKE/apidocs/fake-xmlhelper.html) ve bu şeyin işi yapabildiği görülüyor. Ama örnek yok. Nasıl yapılacağını anlayamadım.

cevap

2

XML dosyalarını işlemek için XMLHelper kitaplığını kullanabilirsiniz. XmlPoke işlevi, bir XML dosyasındaki bir öğeyi bir XPath ifadesi ile referans vererek değiştirmek için kullanılabilir. Package.appxmanifest dosyası ad alanlarını içerir, bu nedenle ad alanlarını düzgün şekilde işleyebilen XmlPokeNS kardeş işlevini almanız gerekir.

Son zorluk Package.appxmanifest'teki varsayılan ad alanıdır. Varsayılan ad alanıyla ilişkilendirdiğiniz bir öneki belirtmeniz gerekir. XPath ifadenizde bu önek XML öğelerine başvurmak için kullanılır.

Özel önek dizesi yok, istediğinizi seçebilirsiniz. Bu örnekte "df" önekini seçiyorum:

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