通常,我制作的解决方案包含多个应用程序,它可能是一个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
当我这样做时,我一定已经真的很累,因为这样做很明显。无需立即传递所有项目,我可以自己进行迭代并弄清楚输出文件夹应该是什么。因此,为解决此问题,我仅添加了两个辅助函数:
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
)
这样,您将为每个构建的项目在输出目录中获得一个文件夹。文件夹的名称取自项目文件的父目录名称。如果需要,可以改用文件的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句