1

我有一些批处理代码:

Path=C:\Windows\Microsoft.NET\Framework64\v4.0.30319

ECHO Trying TFS build...

msbuild D:\WORK\project\project.sln /p:Config="Debug" /p:Platform="Any CPU" /flp1:logfile=BuildLogProject.txt 

那是正确的。我想在我的 C# 应用程序中使用 MSBuild。

我添加了 Microsoft.Build.Engine 参考,我正在使用 Engine 类。我写了一些代码。但它不起作用。

当我使用 Visual Studio 或批处理程序构建项目时“构建成功”。当我使用我的程序构建项目时,它会发现项目中没有的错误和警告。

     Engine engine = new Engine();
     engine.BinPath = @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319";
     FileLogger logger = new FileLogger();
     logger.Parameters = @"logfile=D:\WORK\project\BuildLogProject.txt";

     engine.RegisterLogger(logger);
     string projectPath = @"D:\WORK\project\project.sln";

          try
          {
               bool success = engine.BuildProjectFile(projectPath);

          }

          catch (Exception ex)
          {
                System.Windows.Forms.MessageBox.Show(ex.Message);  
          }

          finally
          {
                engine.UnregisterAllLoggers();
                engine.UnloadAllProjects();
          }
4

1 回答 1

2

您的问题是您尝试构建 .SLN 文件。解决方案文件本身不是 msbuild 脚本。只有底层 .<XX>proj 文件使用 msbuild 格式。

实际上,当您运行msbuild.exe someSLN.sln - msbuild 会根据您的 sln 文件自动生成脚本,然后由引擎执行它。我不知道你如何自己生成它,但你可以通过使用特殊的环境变量来查看自动生成的文件(如果你试图通过命令行将它作为属性传递,则不起作用)。

执行SET MSBuildEmitSolution = 1 并执行msbuild.exe someSLN.sln后,您会在 .sln 之一附近找到someSLN.sln.metaproj文件。当您尝试通过命令行和 msbuild.exe 构建解决方案时,这正是构建引擎所提供的内容

于 2012-09-14T19:39:14.293 回答