无法以编程方式使用MSBuild构建项目

时间:2012-12-16 16:39:27

标签: c# visual-studio-2010 msbuild target targets

我正在尝试以编程方式将Visual Studio .csproj与MSBuild打包在一起(使用命名空间Microsoft.Build.Evaluation)。 我可以使用像

这样的命令正确打包这个项目
    MSBuild "C:\Users\Documents\Visual Studio 2010\Projects\TestMvc\TestMvc\TestMvc.csproj" /T:Package

但是当我使用下面的代码时(我实现了自己的记录器,但这里没关系):

            var project = new Microsoft.Build.Evaluation.Project(@"C:\Users\Documents\Visual Studio 2010\Projects\TestMvc\TestMvc\TestMvc.csproj");

            var logger = new OutputLogger(_panel);
            List<Microsoft.Build.Framework.ILogger> loggers = new List<Microsoft.Build.Framework.ILogger>();
            loggers.Add(logger);
            var targets = new string[] 
            { 
                "Package"

            };
            var result = project.Build(targets, loggers);
    Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.UnloadProject(project);

未构建解决方案。 Logger给我一个错误“输出文件”obj \ Debug \ TestMvc.dll“不存在。”

在Visual Studio中手动构建此项目(成功构建所有二进制文件后),此代码成功打包项目。所以已经有了所有必要的二进制文件。

问题是:为什么以编程方式启动的“Package”目标不等于命令行发出的“Package”,以及如何强制前者执行与命令行相同的操作?

UPD。的 为了看看发生了什么,我在两种情况下都启用了诊断输出。我得到了什么: Console命令生成以下日志:

Target "CoreCompile: (TargetId:37)" in file "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets" from project "D:\Users\Documents\Visual Studio 2010\Projects\MvcTest2\MvcTest3\MvcTest3.csproj" (target "Compile" depends on it):
Building target "CoreCompile" completely.
Output file "obj\Debug\MvcTest3.dll" does not exist.
Using "Csc" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Csc" (TaskId:20)
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe .....
  Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1 (TaskId:20)
  Copyright (C) Microsoft Corporation. All rights reserved. (TaskId:20)
   (TaskId:20)
Done executing task "Csc". (TaskId:20)

从API调用时,我得到以下日志:

Target "CoreCompile" in file "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets":
Building target "CoreCompile" completely.
Output file "obj\Debug\MvcTest3.dll" does not exist.
Using "Csc" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Csc"
Done executing task "Csc".

因此,在两种情况下都会启动Csc任务,但是,当它由API启动时它不会产生任何输出文件(我甚至在文件监视器中检查过它,没有生成任何文件)。

0 个答案:

没有答案