使用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忽略的信息。
答案 0 :(得分:0)
您正在使用弃用类型,如果您使用新类型,那么它可以工作:
let projects = new ProjectCollection()
projects.RegisterLogger(new ConsoleLogger())
let project = projects.LoadProject("MyProjectFile.fsproj")
let succeeded = project.Build("Build")
如果您没有看到有关弃用类型的任何警告,那么您可能正在引用旧版本的MSBuild程序集。