2013-01-16 26 views
4

我剛開始在我的MonoTouch解決方案中使用ServiceStack.Text.MonoTouch.dll。一切都在編譯並在模擬器中運行,但只要我嘗試在手機上運行調試版本,編譯過程就會死亡,並顯示以下錯誤: 錯誤MT3001:無法AOT程序集.../ServiceStack.Text。 MonoTouch.dll'MonoTouch調試不構建與ServiceStack.Text(AOT錯誤)?

我讀過這是由於ServiceStack.Text DLL太大或沿着這些線的東西。所以我嘗試了發佈模式,並且由於LLVM處於打開狀態,並且鏈接器轉向「僅鏈接SDK程序集」,因此可以正常工作。

這是有問題的,因爲我現在無法在設備上進行調試。在調試模式下,鏈接器被禁用,LLVM被關閉。有沒有辦法解決?

MT 6.0.8 & 最新版本的ServiceStack dll關閉Github。

回答

1

In debug mode the linker is disabled,

否(至少不是默認情況下)。

默認情況下,爲所有設備構建(調試或發佈)啓用託管鏈接器(Link SDK)。然而,默認(Link SDK)將不能從ServiceStack.Text.dll中刪除未使用的代碼,因爲該程序集不是SDK程序集。

您需要將選項切換爲鏈接所有程序集以確保其得到處理。

請注意,如果鏈接器不安全(例如,使用反射),則可能需要在自己的代碼上添加[Preserve]屬性(或--linkskip=ASSEMBLY)。一個例子見thread

+0

嘗試將鏈接器模式更改爲「鏈接所有程序集」,並且仍然出現AOT錯誤。 – Dylan

+0

請編輯您的問題並添加AOT錯誤(它可能與我們在類似案例中看到的其他錯誤不同)。 **完整**構建日誌可能也有幫助(但可能太大以至於無法包含在您的問題中)。 – poupou

+0

添加了我得到的錯誤。不確定MT3001是否意味着什麼?只是奇怪它如何在調試模式下做到這一點。 – Dylan