f# windows-phone-8.1 f#-fake

f# - Manipular un archivo XML con FALSO



windows-phone-8.1 f#-fake (1)

Pregunta: ¿Cómo configuro un atributo específico en un archivo XML con FALSO?

Quiero construir un proyecto Windows Phone 8.1 con la ayuda de FAKE. La etiqueta de versión es un parámetro del script de compilación. La etiqueta ya está procesada en la siguiente información:

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

Hay otro archivo en un proyecto de Windows Phone 8.1 que contiene información de la versión: Package.appxmanifest.

<?xml version="1.0" encoding="utf-8"?> <Package ...> <Identity Name="..." Publisher="..." Version="1.0.0.0" /> ... </Package>

Quiero cambiar el valor del atributo Versión de la etiqueta Identidad. Debe contener la etiqueta de versión dada como parámetro de compilación. Quiero hacerlo en un destino separado con el nombre "AppxManifest" y se debe ejecutar después de manipular el archivo de información del ensamblado pero antes de que se ejecute la compilación de MSBuild:

Target "AppxManifest" (fun _ -> ??? ) "Clean" ==> "RestorePackages" ==> "AssemblyInfo" ==> "AppxManifest" ==> "Build"

He encontrado un XMLHelper en la documentación de FAKE ( http://fsharp.github.io/FAKE/apidocs/fake-xmlhelper.html ) y parece que esto puede hacer el trabajo. Pero no hay ejemplos. No pude encontrar la manera de hacerlo.


Puede usar la biblioteca XMLHelper para manipular archivos XML. La función XmlPoke se puede usar para cambiar un elemento en un archivo XML al hacer referencia a él con una expresión XPath. El archivo Package.appxmanifest contiene espacios de nombres, por lo tanto, debe tomar la función hermana XmlPokeNS, que puede manejar los espacios de nombres correctamente.

La última dificultad es el espacio de nombre predeterminado en Package.appxmanifest. Debe especificar un prefijo que asocie con el espacio de nombres predeterminado. En su expresión XPath, este prefijo se utiliza para hacer referencia a los elementos XML.

No hay una cadena de prefijos especial, puede elegir lo que desee. En este ejemplo elijo el prefijo "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