5

RAD Studio XE4 のプロジェクトで奇妙なmsbuildエラーが発生しました。何が起こっているのかを診断するための助けを求めています。私はこれに数週間遭遇しましたが、自分で解決することに成功していません - もっと広く尋ねる時が来ました. 症状は次のとおりです。

  • IDE 内からビルドおよび実行されたプロジェクトでは、動作しているようにmsbuild Project.cbproj見えます
  • 実行msbuild Project.cbproj /t:Cleanすると動作し、中間ファイルを正常に削除します。出力を視覚的にスキャンしても、異常なファイルが削除されていることは示されません。.obj ファイル、リンカー状態ファイル、最終的な EXE などだけです。
  • ただし、クリーニング後またはクリーン チェックアウト時に実行msbuild Project.cbproj /t:Buildまたは単純に実行すると、次のエラー メッセージが表示されて失敗します。msbuild Project.cbproj

Microsoft (R) Build Engine バージョン 3.5.30729.5420 [Microsoft .NET Framework、バージョン 2.0.50727.5472] Copyright (C) Microsoft Corporation 2007. All rights reserved.

ビルドは 2013 年 12 月 9 日 10:35:03 に開始されました。ノード 0 のプロジェクト "C:\projects\Project.cbproj" (既定のターゲット)。

_PasDepCheck: 変更: Source\Common\resample.pas _PasCoreCompile: Embarcadero Delphi for Win32 コンパイラ バージョン 25.0 Copyright (c) 1983,2013 Embarcadero Technologies, Inc. C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\Bin\ CodeGear.Cpp.Targets(191 1,5): エラー F1026: ファイルが見つかりません: 'True.dpr' プロジェクトのビルドが完了しました "C:\projects\Project.cbproj" (既定のターゲット) -- 失敗しました。

ビルドに失敗しました。

"C:\projects\Project.cbproj" (デフォルト ターゲット) (1) -> (_PasCoreCompile ターゲット) -> C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\Bin\CodeGear.Cpp.Targets(1) 911,5): エラー F1026: ファイルが見つかりません: 'True.dpr'

0 Warning(s)
1 Error(s)

これについていくつかのことが私を驚かせます:

  • 一番上に .Net の 2 つのバージョンがリストされており、古いバージョンは角括弧で囲まれています。2 つのフレームワークの一部をロードまたは使用している可能性はありますか?
  • True.dpr.cbprojまた、ファイルを手動で検索してエントリを見つけることも、プロジェクト名として誤解される可能性があるように見えるエントリを見つけることもできませTrue.dprTrue。(Delphi に慣れていない場合、.dpr ファイルは昔ながらのプロジェクト ファイルです。これにはエントリ ポイントが含まれています。ビルドすることは、msbuild がどこかでソースまたはプロジェクト エントリを見つけていることを意味する場合があります。「True」は . cbproj ファイルが誤って解釈されているか破損しています - しかし、それは真新しいため、そうあるべきではなく、IDE 内から動作します。)

システムとプロジェクトに関するその他の情報:

  • このプロジェクトは RAD Studio 2010 からアップグレードされています。ただし、プロジェクト ファイルは XE4でゼロから作成されたものです。つまり、IDE で新しいプロジェクトを作成し、既存のユニット (Delphi および C++ ファイル) を追加することによって、まったく新しいものです。
  • このプロジェクトは、1 つまたは 2 つの Delphi ユニットを含む C++ プロジェクトです。コンパイルの開始時に Delphi ユニットをコンパイルすると、落ちていることがわかります。C++ と Delphi の混合に慣れていない方のために説明すると、通常、混合ソース プロジェクトでは、IDE または msbuild が最初に Delphi ユニットをコンパイルします (そうすることで、C++ ヘッダーを作成/更新して、Delphi コードとインターフェイスを取ることができます)。
  • プロジェクトはグループの 1 つですが、スタンドアロンでコンパイルする必要があります。
  • Update 1 で RAD Studio XE4 をインストールしました。
  • msbuildRAD Studio XE4 コマンド ラインから起動されます。つまり、rsvars.batファイルを使用してパスなどを設定します。
  • 上記の出力では、実際のプロジェクト名を識別したくないため、実際のプロジェクト名を Project に変更しました。ただし、残りの出力は正確です。

何か案は?私は何年もの間それを解決しようとしてきましたが、困惑しています。

4

3 に答える 3

9

Delphi XE5でも同じエラーが発生しました。MSBUILD を実行すると/v:diag、DCC32 の完全なコマンドラインが出力されますtrueが、パラメーターの中に不正なものがありました。

次のページが解決策を示しています: http://wiert.me/2013/11/20/when-the-delphi-xe5-commandline-compiler-fails-with/

この場合、パラメーター を渡しました/p:DCC_DebugInformation=trueが、これは .dproj ファイルにある可能性もあります。true問題を修正するように変更し2ます-つまり

MSBBUILD /p:DCC_DebugInformation=2 project.dproj
于 2013-11-21T03:13:03.713 に答える
0

将来の読者に役立つことを願って、私自身の質問に答えます。

このコメントは重要でした:

一番上に .Net の 2 つのバージョンがリストされており、古いバージョンは角括弧で囲まれています。2 つのフレームワークの一部をロードまたは使用している可能性はありますか?

結局、プロジェクト名ではないことが判明しました。代わりに、RS2010 に同梱されている msbuild バージョンで使用するカスタム ビルド ロガーを作成しました。これは異なるバージョンの .Net でビルドされており、ロガー DLL をロードすると msbuild 内で大きな問題が発生するように見えました。

この答えが間違っている可能性がある理由:カスタム ロガーなしでコマンド ラインを試してみました (古い動作中のコマンド ラインを少しずつ削除してから、もう一度作業して問題を見つけました)。それらのsans -logger ビルドも失敗しました。少し困惑。msbuild のクラッシュしたインスタンスからの中間出力が後続の実行を混乱させたり、.Net ランタイム内の何かが DLL または別のロードされたランタイムの使用をキャッシュした可能性があります。カスタムロガーが確かに問題を引き起こしたことは知っています.DLL自体を削除するだけでなく(すべてが実際に機能し始めたときです)、コマンドラインから削除するだけで問題が解決しました.

于 2013-11-18T10:22:47.433 に答える