2016-11-11 75 views
1

在我努力創建使用Xamarin Forms中的HttpClient(SendAsync)上傳視頻的進度指示器時,現在我需要尋求幫助。自定義HttpContent不會構建 - 不可能AOT程序集(mtouch)

上傳本身工作正常,所有其他API調用,但是當我嘗試創建自定義HttpContent來跟蹤上傳的進度時,項目甚至不會再構建。

錯誤MT3001:無法AOT大會 '[...]的iOS/OBJ/iPhone /調試/集結iphone7.2-10.1.1/mTouch觸摸緩存/編譯/ theproject.dll' (MT3001)(theproject.iOS)

使用StreamContent或ByteArrayContent而不是生成項目,但我不能讓它工作,跟蹤進度。

的代碼片段(這是最小的例子):

public class ProgressableContent : HttpContent 
{ 
    private const int defaultBufferSize = 4096; 
    private Stream content; 
    private int progress; 

    public ProgressableContent(Stream content) 
    { 
     this.content = content; 
    } 

    protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) 
    { 
     return Task.Run(async() => 
     { 
      var buffer = new byte[defaultBufferSize]; 
      var size = content.Length; 
      var uploaded = 0; 

      using (content) while (true) 
      { 
       var length = content.Read(buffer, 0, buffer.Length); 
       if (length <= 0) break; 

       uploaded += length; 
       progress = (int)((float)uploaded/size * 100); 

       await stream.WriteAsync(buffer, 0, length); 
      } 
     }); 
    } 

    protected override bool TryComputeLength(out long length) 
    { 
     length = content.Length; 
     return true; 
    } 
} 

我用這種通過將我的字節的一個流,希望正確:

//... building httpMessage. 
httpMessage.Content = new ProgressableContent(await byteArrayContent.ReadAsStreamAsync()); 
//... 
var response = await _httpClient.SendAsync(httpMessage, Cancellation.Token); 
//... 

的問題(S): 我不知何故導致錯誤?有一個更好的方法嗎?

此標籤與Xamarin.iOS也monotouch抱怨。

+1

您使用的是哪個版本的'Xamarin.iOS'?禁用增量構建幫助嗎?結帳和鏈接的問題:https://bugzilla.xamarin.com/show_bug.cgi?id=43689 – SushiHangover

+0

@SushiHangover Xamarin.iOS ver。 10.2.0.4(Xamarin Indie),增量構建未啓用。 – Mackan

回答

2

雙擊XS中的錯誤,它會將您帶到提供關於該問題的更多描述的網頁。例如。

MT3001無法AOT大會 '*'

這通常表示在AOT編譯器的錯誤。請將錯誤 http://bugzilla.xamarin.com與一個可用於 的項目重現錯誤。

有時可以通過在項目的iOS Build選項中禁用增量 構建來解決此問題(但它仍然是一個bug,因此 請反正報告)。

最主要約3001是,AOT編譯器不產生輸出二進制文件。這可能有幾個原因。通常這個過程崩潰了,構建日誌會給出更多細節的原因。

更重要的是將一個自包含的測試用例附加到bug報告。除了你粘貼的代碼之外,別的東西可能是導致崩潰的一個重要部分(並且可能不可能重複或猜測該部分可能是什麼)。這也給了我們一個更好的機會來提出解決問題的方法。

+0

我確實按照鏈接的第一件事,但我覺得這是一個非常「通用」的答案。我在這裏發佈的原因是爲了瞭解這是否是http庫的一個已知限制,或者如果我的代碼是某種責任。我會嘗試將它報告爲一個錯誤,並希望我的問題可以產生一些替代方法。謝謝。 – Mackan

+0

是的,這是一個相當通用的答案,因爲它是一個通用的錯誤代碼(當AOT'ing時出錯了)。你發佈的內容只是冰山一角(錯誤),沒有人(即使我們在Xamarin)也可以提供更準確的答案,而不需要我上面提出的問題。現在'MT3001'總是**錯誤,因爲(即使您的代碼存在問題),我們應該能夠報告更好,準確的錯誤。 – poupou

+0

我明白了。只是我注意到一個小的FYI:該項目在模擬器(v10.1)上構建並運行良好,但在我的手機(v10.1.1)上運行良好。我會嘗試完成自包含的測試用例,並在週末通過正確的渠道進行報告。 – Mackan

相關問題