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