Microsoft.Build.BuildEngine ignores BeforeTargets
本文关键字:BeforeTargets ignores BuildEngine Build Microsoft | 更新日期: 2023-09-27 17:59:38
使用Microsoft.Build.BuildEngine
库构建项目文件似乎忽略了BeforeTargets
属性。
我的项目文件有以下目标:
<Target Name="MyTestTarget" BeforeTargets="Build">
<Message Importance="High" Text="Running MyTestTarget" />
</Target>
当我用以下代码(F#,但在C#中也这样做)编译它时:
open System
open Microsoft.Build.BuildEngine
open Microsoft.Build.Framework
[<EntryPoint; STAThread>]
let main argv =
let engine = new Engine()
engine.RegisterLogger(new ConsoleLogger())
let project = new Project(engine)
project.Load("MyProjectFile.fsproj")
let succeeded = engine.BuildProject(project, "Build")
0
则不运行目标CCD_ 3。请注意,当我使用MSBuild.exe
4.0时,"MyTestTarget"
会正确运行。
我知道BeforeTargets是在MSBuild 4.0中添加的,如果与旧版本的Microsoft.Build
一起使用,会引发异常。但我没有发现任何关于BeforeTargets被MSBuild 4忽略的信息。
您使用的是不推荐使用的类型,如果您使用新的类型,则它有效:
let projects = new ProjectCollection()
projects.RegisterLogger(new ConsoleLogger())
let project = projects.LoadProject("MyProjectFile.fsproj")
let succeeded = project.Build("Build")
如果您没有看到任何关于不推荐使用的类型的警告,那么可能您引用的是MSBuild程序集的旧版本。