Microsoft.Build.BuildEngine忽略BeforeTargets

时间:2014-04-22 15:27:53

标签: c# f# msbuild msbuild-4.0 microsoft.build

使用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

目标"MyTestTarget"未运行。请注意,当我使用MSBuild.exe 4.0时,"MyTestTarget"正确运行。

我知道在MSBuild 4.0中添加了BeforeTargets,如果与旧版Microsoft.Build一起使用,则会抛出异常。但我还没有发现任何有关BeforeTargets被MSBuild 4忽略的信息。

1 个答案:

答案 0 :(得分:0)

您正在使用弃用类型,如果您使用新类型,那么它可以工作:

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

如果您没有看到有关弃用类型的任何警告,那么您可能正在引用旧版本的MSBuild程序集。