将 FileIncludes 转换为 filefilter 谓词

Convert FileIncludes to filefilter predicate

我正在尝试使用 CopyDir 将我的构建工件复制到输出目录。

我不确定我应该如何定义 CopyDir 作为参数的过滤器谓词。我查看了文档并尝试在 Google.

上搜索许多不同的关键字

Target "Copy-Build-Output" (fun _ -> let baseDir = (sourceDir + @"Trunk\Webroot") let outputfiles = !! (sourceDir @@ "**/*.*") -- (sourceDir @@ "**/*.cs") -- (sourceDir @@ "**/*.csproj") -- (sourceDir @@ "**/*.vspscc") -- (sourceDir @@ "**/*.cssscc") -- (sourceDir @@ "web.config") -- (sourceDir @@ "bin/*.xml") -- (sourceDir @@ "obj/**") CopyDir outputDir baseDir ???? )

如何获取文件包含集并将其转换为匹配语句?

为什么您需要创建单独的目标来复制输出,而您可以在构建目标本身中设置输出目录,如下所示(MSBUILD 示例)。 您可以根据构建脚本的位置设置路径,如 OutDir 和源代码路径(例如在应用程序根目录下构建脚本)

 Target "Build" (fun _ -> 
!! "**/*.csproj"
-- "**/*.Tests.csproj"
    |> MSBuildRelease OutDir "Rebuild"
    |> Log "Building Projects: "

更多信息请参考http://fsharp.github.io/FAKE/apidocs/fake-msbuildhelper.html

如果您想复制每个文件(例如*.*),(fun x -> true) 的过滤谓词就足够了。

Target "Copy-Build-Output" (fun _ ->
    let baseDir = (sourceDir + @"Trunk\Webroot")
    let outputfiles =
        !! (sourceDir @@ "**/*.*")
          -- (sourceDir @@ "**/*.cs")
          -- (sourceDir @@ "**/*.csproj")
          -- (sourceDir @@ "**/*.vspscc")
          -- (sourceDir @@ "**/*.cssscc")
          -- (sourceDir @@ "web.config")
          -- (sourceDir @@ "bin/*.xml")
          -- (sourceDir @@ "obj/**")
    CopyDir outputDir baseDir (fun x -> true)
)

过滤谓词是一个函数string -> bool。这是任何将 string 作为输入并返回 bool.

的函数

因此,如果仅复制 .png 个图像,您可以使用 (fun x -> x.EndsWith(".png"))

可能还有其他指定文件的方法。但这对我有用。