我知道如何基於Mono分支代碼(Type.GetType(「Mono.Runtime」)!= null),但即使Mono代碼路徑爲採取,單聲道試圖加載非單聲道代碼路徑所需的程序集。這並不令人驚訝,但我該如何解決這個問題?我試過把電話打到另一個班的非單人大會上,但這並沒有幫助。如何防止在Mono中運行某個程序集時引用
回答
直接做到這一點的唯一選擇就是一路反射,就我所見。
我建議一個更迂迴的方法:將所有依賴於Mono或.NET的代碼重構爲單獨的程序集,每個平臺一個 - 讓我們稱它們爲MA和NA。確保你的類的整個API表面被通用接口覆蓋,這應該在第三個程序集IA中。之後,您的主應用程序將IA引用爲接口,並且僅使用Reflection來加載MA或NA,具體取決於它是在Mono還是.NET上運行,並獲得「頂級工廠類」的實例。一旦出現,它就會使用通過IA接口的普通調用來通過該工廠實例化所有其他對象並使用它們。
不要在命令行編譯器選項中添加引用。如果您使用的是高級IDE工具,那麼您可能需要使用其項目設置來實現相同的功能。 還有其他一些文件也會像AssemblyInfo.cs一樣發揮作用,並且可能包含有關您正在考慮的程序集的說明。此外,該程序可能使用來自App.Config(配置文件)或Web.Config(ASP.NET)/動態類型加載的類型。
不要依賴於您的依賴關係,因爲您的代碼已被打亂並且僅調用了被調用的代碼。
最好總是假設,無論引用什麼都會被加載並且必須可用。 您的用戶可能會選擇使用AOT,這是Mono的NGEN副本。 新版運行時版本處理諸如序列化,遠程處理,安全性,反射等方面的細微差別可能導致您的引用被加載,即使您的代碼不直接使用任何東西。 (但是序列化程序可能已經拉取了所有類型,然後加載了其他程序集)
使用接口或經典繼承,或者可能是事件或其他間接方式來僅在適當時加載.Net部件。而我的意思是一個你不參考但是動態加載的程序集。
擴展Pavel的答案,你可以使用插件框架來幫助加載特定於平臺的代碼位的條件。您可以使用Mono.Addins或MS自己的開源Managed Extensibility Framework(MEF)(http://www.codeplex.com/MEF)
- 1. 如何防止未找到引用的程序集時崩潰?
- 2. 如何在運行時在mvc中引用程序集
- 3. 如何用MONO參數運行程序?
- 4. 如何防止SL4應用程序使用SL5運行時?
- 5. 如何防止應用程序運行時卸載?
- 6. 如何防止Java程序在其他應用程序運行時滯後?
- 7. 防止在程序中引用?
- 8. 如何防止應用程序在啓動運行?
- 9. 如何防止.NET應用程序從GAC加載/引用程序集?
- 10. 如何創建「原生」運行Mono應用程序的OSX包(引導程序)
- 11. 如何防止我的macOS應用程序同時運行多個實例?
- 12. 如何防止應用程序執行?
- 13. 防止在c中加載程序集#
- 14. Android - 如何防止應用程序在過濾器ACTION_SEND時自動運行,只有一個應用程序
- 15. 如何防止應用程序在沒有互聯網連接時運行
- 16. asp.net on mono:如何添加對程序集的引用
- 17. 如何在另一個引用程序集中加載引用程序集?
- 18. 如何防止多次運行spring應用程序?
- 19. 防止多個用戶在macOS上同時運行應用程序
- 20. 如何防止Installer.Commit()運行?
- 21. 如何使用複選框來防止某些輸出運行?
- 22. 缺失libnoise.dll防止程序運行
- 23. 如何在Spark集羣上運行Spring引導應用程序
- 24. Mono中的.NET程序集
- 25. 防止某些模型在Rails應用程序中使用Tire編入索引
- 26. XCode在模擬器中運行時如何停止應用程序的運行
- 27. 防止任務在某些線程上運行
- 28. 在運行時找不到引用的.Net程序集
- 29. 防止過程運行
- 30. 如何在Visual Studio中禁止程序集引用警告?
我正在使用Visual Studio進行編譯,而不是使用Mono進行編譯。 – Fantius 2009-10-28 20:32:10