4

Delphi XE2 バージョン 16.0.4429.46931 に、実行時パッケージと設計時パッケージの両方を含むコンポーネント パッケージがあります。このパッケージは 1 年以上存在し、ファイル/フォルダー構造は常に同じです。すべてのユニットをSourceルートから専用のフォルダーに保存し、実際のパッケージをPackages同じルートのフォルダーに保存します。したがって、パッケージは に\Root\Packages\あり、ユニットは にあり\Root\Source\ます。

今日、ランタイム パッケージをビルドした後、ヒントと警告を調べていました。警告の1つはこれでした:

[DCC Warning] Inno.TimeChart.pas(1): W1025 Unsupported language feature: 'class constructor'

警告自体は私が心配していることではありません。問題は、この警告をダブルクリックすると、IDE からエラー メッセージが表示されることです。

IDE エラー メッセージ

すぐに気付いたのは、フォルダー内ではSourceなく、フォルダー内を直接検索していることPackagesです。どういうわけか、IDE はユニットがパッケージと同じ場所にあることを期待しています。1 年以上前にパッケージを作成して以来、ライブラリ パス、ファイルの場所、またはパッケージの構造を変更したことはありません。

ファイルは存在しますが、見た目とは異なる場所にあります。ファイルはプロジェクトと共にフォルダーに保存されたことはなく、実際にはパッケージ プロジェクト自体以外はフォルダーに保存されたことはありませんPackages。これはすべてSourceフォルダーに存在しますが、IDE は別の方法で考えているようです。

このファイルが別のフォルダにあると IDE が判断するのはなぜですか? 同じユニットに関連する他のすべてのヒントと警告は、ダブルクリックすると正常に機能しますが、これは機能しません。

編集

この問題をトラブルシューティングするために、新しいテスト パッケージを作成しました。

Root\TestPackage.dpr
Root\Source\TestPackageUnit.pas

このコンパイラ警告を引き起こしている特定のコードは、次のクラスにあります。

type
  TMyComponent = class(TComponent)
  strict private
    class constructor Create;
  end;

Process Monitor を使用してコンパイルすると、IDE がこのファイルを 30 以上の異なる場所で検索していることがわかります (もちろん失敗します)。パッケージが示す 1 つの場所ではなく、すべてのライブラリ パスで検索しているようです。

私が試したこと

  1. DPRDPROJファイルの間でこれらのパスに違いがないことを確認しました。
  2. 最新の更新プログラムと IDE フィックスパックをすべてインストールしました (実際に新しい問題が発生しました)
  3. Process Monitorでファイルのアクセスを監視
    1. フィルター: プロセス名が等しいBDS.exe。パスの終わりTestPackageUnit.pas
    2. 結果: "NAME NOT FOUND" --> 目的のアクセス: 一般的な読み取り 処理: オープン オプション: 同期 IO 非アラート、非ディレクトリ ファイル属性: N ShareMode: 読み取り、書き込み AllocationSize: n/a
  4. designtime-only、runtime-only、および designtime/runtime を組み合わせて試しました
  5. 登録済みおよび未登録のコンポーネントで試しました
  6. ライブラリパスではなく、ライブラリパス内のディレクトリで試しました
  7. ライブラリ パスから約 20 の不要なエントリを削除して短くしました
  8. ディレクトリをライブラリ パスの先頭に移動しました
  9. DOFプロジェクトに関連付けられたファイルがないことを確認しました(古いバージョンのものだと思います)
  10. IDE とコンピュータを再起動した回数
  11. BPL および DCU ファイルを含む、プロジェクトからのコンパイル済みおよび一時ファイルのクリーンアップ
  12. strict privateJust privateand Even に変更public
4

3 に答える 3

3

Delphi の検索パス リストが長すぎると、このような問題が発生します。関連するディレクトリをもっと前に、つまりリストの上に移動することで、いつでも自分を助けることができました。

于 2012-12-27T09:03:21.407 に答える
1

別のウェブサイトでこれを見つけました:

おそらくあなたの問題に関連している別の QC があります。 http://qc.embarcadero.com/wc/qcmain.aspx?d=87693

[プロジェクト オプション] -> [Delphi コンパイラ] -> [C/C++ を出力] に移動し、[C/C++ 出力ファイルの生成] で [DCU のみを生成] を選択します。

ダリヤ・プラスニカール

ソース: http://codeverge.com/embarcadero.delphi.general

于 2014-10-29T00:48:42.960 に答える
1

プロジェクトファイル(dprまたはdpk)にファイルが追加されていないことを確認してください。Project - View Source はファイルを表示します。

そうでない場合は、プロジェクト内のすべてのファイルでファイル名を検索して、何が表示されるかを確認してください。

于 2012-12-30T07:37:46.967 に答える