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忽略的信息。

Microsoft.Build.BuildEngine ignores BeforeTargets

您使用的是不推荐使用的类型,如果您使用新的类型,则它有效:

let projects = new ProjectCollection()
projects.RegisterLogger(new ConsoleLogger())
let project = projects.LoadProject("MyProjectFile.fsproj")
let succeeded = project.Build("Build")

如果您没有看到任何关于不推荐使用的类型的警告,那么可能您引用的是MSBuild程序集的旧版本。