F# 使用伪代码操作XML文件

F# 使用伪代码操作XML文件,f#,windows-phone-8.1,f#-fake,F#,Windows Phone 8.1,F# Fake,问题:如何使用FAKE在XML文件中设置特定属性 我想在FAKE的帮助下构建一个Windows Phone 8.1项目。版本标记是生成脚本的一个参数。标记已烘焙到assemply信息中: let version = getBuildParamOrDefault "version" "0.0.0.1" Target "AssemblyInfo" (fun _ -> CreateCSharpAssemblyInfo "./src/SharedAssemblyInfo.cs"

问题:如何使用FAKE在XML文件中设置特定属性

我想在FAKE的帮助下构建一个Windows Phone 8.1项目。版本标记是生成脚本的一个参数。标记已烘焙到assemply信息中:

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项目中还有一个包含版本信息的文件:Package.appxmanifest

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

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

    ...

</Package>

我在FAKE()的文档中发现了一个XMLHelper,看起来这个东西可以完成这项工作。但没有例子。我不知道怎么做。

您可以使用XMLHelper库来操作XML文件。通过使用XPath表达式引用XML文件中的元素,可以使用XmlPoke函数来更改该元素。Package.appxmanifest文件包含名称空间,因此必须使用能够正确处理名称空间的姐妹函数XmlPokeNS

最后一个困难是Package.appxmanifest中的默认名称空间。必须指定与默认命名空间关联的前缀。在XPath表达式中,此前缀用于引用XML元素

没有特殊的前缀字符串,您可以选择任何您想要的。在本例中,我选择前缀“df”:

打开Fake.XMLHelper
目标“PackageAppxmanifest”
let file=“”
设ns=[“df”http://schemas.microsoft.com/appx/2010/manifest" ]
让xpath=@“df:Package/df:Identity/@Version”
XmlPokeNS文件ns xpath版本
Target "AppxManifest" (fun _ ->

    ???

)

"Clean"
==> "RestorePackages"
==> "AssemblyInfo"
==> "AppxManifest"
==> "Build"
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