2009-07-28 46 views
10

(更多程序包/組件安裝對我有用 - 感謝所有人爲您提供所有幫助)。「無法加載程序包A,它包含單元X,它也包含在程序包B中」

我在Delphi 2007中看到列爲標題的錯誤。包A是我基於框架的「查看器面板」的包。軟件包B是一個包含幾個組件的軟件包,用於顯示鏈接到gven數據庫(它們的SQL,狀態,類類型等)的數據集的信息,其中一個是非可視組件(我們稱它爲檢查員)創建並呼叫顯示該信息的表單。單位X是該形式的單位。

我在包中添加了Inspector組件到我的查看器面板中的一個,但之後又刪除了它,並且無法在該項目的View Source中找到任何對其的引用,也沒有在基於框架的查看器面板的單元中找到它添加到。參考隱藏在哪裏?

此外,如果將Inspector組件添加到其中一個視圖面板框架(也會作爲註冊組件安裝),會導致此問題?

這很可能與this previous questionthis one有關,但我決定從這個特定的symtpom /問題開始,只是爲了保持簡潔和清晰,並希望稍後對其他人有用。預先感謝任何和所有幫助。


更新:

感謝羅蘭,我能夠找到並刪除用途引用,保持並造成問題的原因。但是,我仍然不清楚如何完成我想要完成的任務。 :\這是最新的:

Inspector是一個簡單的非可視化組件,它包含一個DataSet屬性和一個內部「Info Form」。調用ShowInfo方法將創建表單,並使用與鏈接的DataSet相關的各種信息填充表單。我想用它來調試驅動觀衆的SQL。

如上所述,檢查器包含在包B中。查看器位於包A中。我想在某些TFrame後代(註冊爲真正的調色板組件)上使用檢查器組件。當我將該組件拖放到給定的TFrame上然後使用它並編譯/安裝軟件包A時,我得到「無法加載軟件包A,它包含單元X,它也包含在軟件包B中」錯誤。現在顯然是原因,我可以根據需求重新創建問題。

moobaa的建議以下是有道理的,但它似乎,即使我試圖做他建議的方法#2,它不起作用。我錯過了什麼?看起來這應該是可行的,事實上,我看到的大多數軟件包都是使用其他已安裝的軟件包(包括VCL本身)。

注意:據我所知,包B不依賴於包A(我已經安裝了它,所以似乎同意)。

(順便說一句,有沒有任何工具「圖形輸出」像這樣的軟件包的依賴關係?我使用D2007)

一如往常,感謝您的時間和幫助。

+0

什麼是套餐A和B在你的情況?我得到相同的錯誤,內容如下:無法加載軟件包'Abbrevia160'。它包含單元'AbDfBase',它也包含在'Abbrevia'包中。 Abbrevia和Abbrevia160是完全相同的軟件包。 160只是一個後綴...任何想法? – ple103 2013-03-06 20:56:33

回答

3

只是因爲你刪除的組件並不意味着你刪除USES子句中的模塊名稱 - 不會自動刪除。

7

它也可能與this question有關。

單元X顯然被鏈接到兩個包中。有解決這個幾個方面:

  • 創建一個新包(我們就叫它包C)與單元X(以及其他任何依賴關係),然後更改套餐A和B套餐,以兩者都使用套餐C;或...
  • 包括單元X在包裝B,並具有包A使用程序包B(其爲第一溶液的更緊湊的形式)。

如果觀衆在您套餐B的代碼中明確提到,則B包肯定要使用程序包A(,應該有明確的相關性)。如果沒有明確指出共享代碼,B會將它自己的代碼版本編譯到B中,導致出現問題。現在

,如果相關性是OK,添加引用套餐A從B套餐應該對這個問題進行了馬上;畢竟,B將「使用」程序包A中的代碼,並且相同的單元不會被編譯爲兩個程序包。但是,如果此引入循環引用(我不記得是否使用B或沒有),那麼你可能有一點重構向:}

+0

謝謝。我沒有找到單元X在這個點上如何/在哪裏被鏈接到A中(後看似刪除檢查器組件引用)。任何建議如何揪出來?再次感謝。 – Jamo 2009-07-28 17:28:48

+0

嘗試對單元名稱進行grep搜索 - 正如Loren提到的,並不是使用子句中的所有引用都會被自動刪除。此外,一定要刪除所有的dcu和dcp文件(如Marco所述),然後重建所有文件。 – moobaa 2009-07-29 22:33:37

0

·羅蘭:要求條款,因爲它是一個.dpk,你不能AFAIK採用了一塊包。

我會簡單地收拾$(BDSDIR)/項目/目錄,我自己的項目目錄刪除B.dcp和所有DCU的針對在B中的單位,然後重建A.

另一件事檢查是否有一個組件註冊依賴於B.