通常我制作的解决方案包含多个应用程序,它可能是一个Web应用程序,服务,也许是一个简单的控制台应用程序。
要构建我使用的项目:
let projects = !! "src/**/*.csproj" -- "src/**/*.Tests.csproj"
然后
projects
|> MSBuildRelease buildDir "ResolveReferences;Build"
这个问题是我的所有服务dll和控制台dll最终都在同一个目录buildDir
中,有没有办法强制每个项目在buildDir
内有一个子文件夹?对于Web项目,它看起来很好,因为我有_PublishedWebsites
文件夹可供依赖。
此外,在以这种方式构建时,是否会为多个项目打开多次?我的意思是,如果Service
和Web
都引用了LibA
,那么最终会建立LibA
三次?有一次,由于来自Web
和Service
的引用,它与文件模式本身匹配两次。
更新
这是一个演示项目,你可以在这里找到代码:https://github.com/mastoj/FAKESimpleDemo
答案 0 :(得分:1)
当我这样做时,我一定很累,因为很明显该做什么。我可以自己完成迭代并找出输出文件夹应该是什么,而不是立即传入所有项目。所以为了解决这个问题,我刚刚添加了两个辅助函数:
let getOutputDir proj =
let folderName = Directory.GetParent(proj).Name
sprintf "%s%s/" buildDir folderName
let build proj =
let outputDir = proj |> getOutputDir
MSBuildRelease outputDir "ResolveReferences;Build" [proj] |> ignore
Target "Build" (fun() ->
trace "Building again!"
projects
|> Seq.iter build
)
这样,每个项目构建的输出目录中都会有一个文件夹。文件夹的名称取自项目文件的父目录名称。如果你愿意,你可以使用文件的名称。