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を実行すると、.sln1の近くにsomeSLN.sln.metaprojファイルが見つかります。これは、コマンドラインとmsbuild.exeを介してソリューションをビルドしようとしたときに、ビルドエンジンに正確に出荷されたものです。

于 2012-09-14T19:39:14.293 に答える