Xamarin Forms에서 HttpClient (SendAsync)를 사용하여 비디오를 업로드하기위한 진행률 표시기를 만들기 위해 이제 도움을 요청해야합니다.
업로드 자체가 잘 작동하고 다른 모든 API 호출이 있지만 HttpContent
업로드 진행 상황을 추적 하는 사용자 지정 을 만들려고 하면 프로젝트가 더 이상 빌드되지 않습니다.
오류 MT3001 : 어셈블리 '[...]. iOS / obj / iPhone / Debug / build-iphone7.2-10.1.1 / mtouch-cache / Build / theproject.dll'(MT3001) (theproject.iOS)을 AOT 할 수 없습니다. )
대신 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);
//...
질문 : 내가 어떻게 든 오류를 일으키는가? 이 작업을 수행하는 "더 나은"방법이 있습니까?
monotouch가 불평하기 때문에 Xamarin.iOS로 태그를 지정했습니다.
XS의 오류를 두 번 클릭하면 문제에 대한 자세한 설명을 제공하는 웹 페이지로 이동합니다. 예
MT3001 어셈블리 '*'를 AOT 할 수 없습니다.
이것은 일반적으로 AOT 컴파일러의 버그를 나타냅니다. 오류를 재현하는 데 사용할 수있는 프로젝트와 함께 http://bugzilla.xamarin.com 버그를 제출하십시오 .
때때로 프로젝트의 iOS 빌드 옵션에서 증분 빌드를 비활성화하여이 문제를 해결할 수 있습니다 (하지만 여전히 버그이므로 신고 해주세요).
가장 중요한 것은 3001
AOT 컴파일러가 출력 바이너리를 생성하지 않았다는 것 입니다. 여기에는 몇 가지 이유가있을 수 있습니다. 일반적으로 프로세스가 충돌하고 빌드 로그에 그 이유가 조금 더 자세히 설명되어 있습니다.
더 중요한 것은 버그 보고서에 자체 포함 된 테스트 케이스를 첨부하는 것입니다. 붙여 넣은 코드 외에 다른 것이 충돌을 일으킨 중요한 역할을 할 수 있습니다 (복제하거나 그 조각이 무엇인지 추측하는 것이 불가능할 수 있음). 또한 문제에 대한 해결 방법을 제안 할 수있는 더 나은 기회를 제공합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다