在AS3/Flex中,似乎沒有任何開箱即可阻止客戶端應用程序鏈接(外部或「靜態」)我的SWC的兩個版本。從歷史上看,發生這種情況時,它沒有發生任何編譯器警告,直到我們觀察到最終SWF中出現異常「混合」行爲,我們才知道出現了問題。有什麼我可以做的,以嚴格防止我的圖書館的兩個版本被包含在應用程序中?如何防止客戶端應用程序鏈接兩個不同版本的庫?
1
A
回答
1
有兩種不同的連接方式:
- 靜態鏈接(當程序的所有代碼在編譯時是已知的編譯器)。
動態鏈接(當代碼加載到已編譯的應用程序中時,但它不一定是通過加載它的應用程序編譯的)。
你可能不必擔心,連接兩個不同版本的同一代碼很可能會失敗,除非該代碼被鏈接爲數據(如嵌入式SWF而不是真正的代碼),其中案件,誰這樣做可能會知道他們在做什麼。
如果加載不同版本的庫,則可能會發生幾種不同的情況。在矩陣的一邊有:「加載到不同的安全域」,「加載到子安全域」,「加載到相同的安全域」,在矩陣的另一側:「較新版本加載舊版本」,「舊版本載入較新版本「。
現在,加載到不同的安全域的每一種情況下可以加載不同版本的庫,還有什麼可以做這件事:那就是安全域是。當加載到相同的域時,第一個加載的代碼獲勝。加載到子域時,兩個域中將同時有兩個版本。
我會怎麼做:
class Version {
private static var version:String;
public static function setVersion():void {
if (version) trace("Another library was loaded");
else version = "1.0.0";
}}
import Version;
Version.setVersion();
類定義之外的代碼將盡快SWF加載運行。如果此類已在之前加載,則將設置version
變量。顯然,您可以使用更復雜的方法來確定要做什麼以及是否可以繼續前進,具體取決於版本是什麼。一般來說,你的代碼應該在「加載到子域」的情況下支持多個版本,如果不是,或者試圖以某種方式規避它,它將被認爲是一個錯誤。
+0
謝謝你的詳細解答。只要我回到我的開發環境,我會給這個鏡頭! –
相關問題
- 1. 防止從不同的客戶端應用程序調用webservice
- 2. C#/ SQL雲應用程序 - 不同版本的客戶端
- 3. 如何防止遊戲客戶端版本欺騙?
- 4. 如何防止gmail成爲默認客戶端與mailto鏈接?
- 5. 加載應用程序的客戶端版本不符合要求的版本
- 6. 如何防止客戶端的回傳?
- 7. 如何防止WCF客戶端應用程序中的BufferManager/PooledBufferManager浪費內存?
- 8. 如何防止nodejs應用程序記錄任何客戶端信息
- 9. 同一應用程序的兩個不同版本
- 10. MQTT應用程序使用單個客戶端應用程序/庫與兩個代理連接
- 11. 防止URL出現在郵件客戶端的鏈接
- 12. 確定啓動時應用程序的客戶端版本
- 13. 如何防止用戶兩次訂閱相同的應用程序?
- 14. 客戶如何訪問舊版應用程序版本?
- 15. 如何從一個客戶端版本在我的應用
- 16. 如何防止libwebsockets客戶端超時
- 17. 如何從Web應用程序阻止特定的客戶端?
- 18. 如何在客戶端應用程序
- 19. 如何將2個libc版本鏈接到同一個應用程序中?
- 20. 如何防止兩個用戶註冊相同的用戶名?
- 21. Oracle客戶端:提供程序與Oracle客戶端的版本不兼容
- 22. 如何防止Chrome打開應用程序鏈接
- 23. 防止WCF客戶端反序列化
- 24. Servlet:如何處理兩個不同客戶端的doPost中的兩個響應?
- 25. 鏈接不同版本的共享庫
- 26. 如何阻止用戶使用舊版本的應用程序?
- 27. 鏈接兩個線程在客戶端 - 服務器的Socket程序 - Java的
- 28. 版本控制客戶端服務器應用程序
- 29. 安裝兩個不同版本的應用程序
- 30. 客戶端上的不同java版本用於不同的java web啓動應用程序
我對AS3/Flex不是很熟悉,但是沒有一個屬性可以擴展和跟蹤對應用程序的實例/引用嗎?我已經在C#中使用Singleton實現來禁止一個類被多次實例化,並且如果嘗試這樣做了類實例駐留的內存地址,將返回:) – mayotic
它必定是Flash VM的某些症狀在Flex編譯器中,但我發現即使靜態常量(或AS3意義上的類定義)被覆蓋也會被默認覆蓋。 –
我不認爲有什麼辦法可以做到這一點;但有一個優先順序;因此無論哪個SWC文件被「包含」在最後是我相信使用的那個。除非版本之間有API更改;我不知道爲什麼會有編譯器錯誤。我會嘗試通過建立用於更新構建中的SWC的公約/程序來解決這個問題。@netSkay我很確定他在編譯時正在討論'鏈接';所以這不涉及跟蹤實例。 – JeffryHouser