Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用MSBuild#_C#_Build_Msbuild - Fatal编程技术网

C# 在C中使用MSBuild#

C# 在C中使用MSBuild#,c#,build,msbuild,C#,Build,Msbuild,我有一些批次代码: 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.

我有一些批次代码:

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或批处理程序生成项目时,“生成成功”。当我用我的程序构建项目时,它会发现项目中没有的错误和警告


您的问题是您试图构建.SLN文件。解决方案文件不是msbuild脚本本身。 只有基础.proj文件使用msbuild格式

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

执行
设置MSBuildEmitSolution=1

执行后,msbuild.exe someSLN.sln您将在.sln one附近找到someSLN.sln.metaproj文件。当您试图通过命令行和msbuild.exe构建解决方案时,这正是BuildEngine提供给BuildEngine的内容。我想您已经知道BuildEngine.engine类在.NET framework 4中被标记为过时。是的,我使用的是build.BuildEngine。它过时了吗?然而,我知道engine.Binpath方法已经过时了。但是当我构建我的项目时,没有错误。
     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();
          }