UWP / Xamarin cra sh в тестах на отправку при попытке загрузить магазин Microsoft - PullRequest
0 голосов
/ 08 января 2020

Я работаю с Xamarin Forms над приложением для отправки сообщений с SignalR, которое я тестировал бесчисленное количество раз локально и на Android, и оно отлично работает без сбоев, но когда они делают тесты, чтобы загрузить его в магазин Microsoft, они сообщить о сбое моего приложения.

По данным Центра приложений, сбой приложения при попытке отправить сообщение через SignalR, это ошибка:

d__46. MoveNext () + 0x14b System.Reflection.MissingMetadataException: эту операцию невозможно выполнить, так как метаданные для следующего объекта были удалены по соображениям производительности: \ n \ n EETypeRva: 0x0035FCD8 \ n \ nНет дополнительной информации доступно. Перестройте в режиме отладки для получения более подробной информации. \ N \ n

System.Reflection.Runtime.TypeInfos
RuntimeNoMetadataNamedTypeInfo.get_InternalFullNameOfAssembly () f:\dd\ndp\fxcore\CoreRT\src\System.Private.Reflection.Core\src\System\Reflection\Runtime\TypeInfos\RuntimeBlockedTypeInfo.cs at 240:17
System.Text.Json
JsonPropertyInfo.Initialize (Type, Type, Type, Type, PropertyInfo, Type, JsonConverter, JsonSerializerOptions) + 0x11f
System.Text.Json
JsonPropertyInfoCommon`4.Initialize (Type, Type, Type, Type, PropertyInfo, Type, JsonConverter, JsonSerializerOptions) + 0x:59
System.Text.Json
JsonClassInfo.CreateProperty (Type, Type, Type, PropertyInfo, Type, JsonConverter, JsonSerializerOptions) + 0x2f:2
System.Text.Json
JsonClassInfo.AddProperty (Type, PropertyInfo, Type, JsonSerializerOptions) + 0x9e
System.Text.Json
JsonClassInfo.AddPolicyProperty (Type, JsonSerializerOptions) + 0x2f
System.Text.Json.JsonClassInfo
+ 0xdd:1
System.Text.Json
JsonSerializerOptions.GetOrAddClass (Type) + 0x:71
System.Text.Json
WriteStackFrame.Initialize (Type, JsonSerializerOptions) + 0x:13
System.Text.Json
JsonSerializer.WriteCore (Utf8JsonWriter, Object, Type, JsonSerializerOptions) + 0x8d
System.Text.Json
JsonSerializer.WriteValueCore (Utf8JsonWriter, Object, Type, JsonSerializerOptions) + 0x3e
Microsoft.AspNetCore.SignalR.Protocol
JsonHubProtocol.WriteArguments (Object[], Utf8JsonWriter) + 0x1ef
Microsoft.AspNetCore.SignalR.Protocol
JsonHubProtocol.WriteStreamInvocationMessage (StreamInvocationMessage, Utf8JsonWriter) + 0x:65
Microsoft.AspNetCore.SignalR.Protocol
JsonHubProtocol.WriteMessageCore (HubMessage, IBufferWriter`1) + 0x55d
Microsoft.AspNetCore.SignalR.Protocol
JsonHubProtocol.WriteMessage (HubMessage, IBufferWriter`1) + 0xc
Microsoft.AspNetCore.SignalR.Client.HubConnection
<SendHubMessage>d__72.MoveNext () + 0x7f
System.Runtime.ExceptionServices
ExceptionDispatchInfo.Throw () + 0x:21
System.Runtime.CompilerServices
TaskAwaiter.ThrowForNonSuccess (Task) + 0x:70
System.Runtime.CompilerServices
TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task) + 0x:38
System.Runtime.CompilerServices
TaskAwaiter.ValidateEnd (Task) + 0x:17
System.Runtime.CompilerServices
TaskAwaiter.GetResult () + 0xb
Microsoft.AspNetCore.SignalR.Client.HubConnection
<InvokeCore>d__70.MoveNext () + 0x:194
System.Runtime.ExceptionServices
ExceptionDispatchInfo.Throw () + 0x:21
System.Runtime.CompilerServices
TaskAwaiter.ThrowForNonSuccess (Task) + 0x:70
System.Runtime.CompilerServices
TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task) + 0x:38
System.Runtime.CompilerServices
TaskAwaiter.ValidateEnd (Task) + 0x:17
Microsoft.AspNetCore.SignalR.Client.HubConnection
<InvokeCoreAsyncCore>d__69.MoveNext () + 0x:335
System.Runtime.ExceptionServices
ExceptionDispatchInfo.Throw () + 0x:21
System.Runtime.CompilerServices
TaskAwaiter.ThrowForNonSuccess (Task) + 0x:70
System.Runtime.CompilerServices
TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task) + 0x:38
System.Runtime.CompilerServices
TaskAwaiter.ValidateEnd (Task) + 0x:17
System.Threading.Tasks
ForceAsyncAwaiter`1.GetResult () + 0x:18
Microsoft.AspNetCore.SignalR.Client.HubConnection
<InvokeCoreAsync>d__56.MoveNext () + 0x:105
System.Runtime.ExceptionServices
ExceptionDispatchInfo.Throw () + 0x:21
System.Runtime.CompilerServices
TaskAwaiter.ThrowForNonSuccess (Task) + 0x:70
System.Runtime.CompilerServices
TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task) + 0x:38
System.Runtime.CompilerServices
TaskAwaiter.ValidateEnd (Task) + 0x:17
System.Runtime.CompilerServices
TaskAwaiter.GetResult () + 0xb
Chat.Shared.Core.ChatService
<SendPrivateMessageAsync>d__46.MoveNext () + 0x14b
System.Runtime.ExceptionServices
ExceptionDispatchInfo.Throw () + 0x:21
System.Runtime.CompilerServices
TaskAwaiter.ThrowForNonSuccess (Task) + 0x:70
System.Runtime.CompilerServices
TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task) + 0x:38
System.Runtime.CompilerServices
TaskAwaiter.ValidateEnd (Task) + 0x:17
System.Runtime.CompilerServices
TaskAwaiter.GetResult () + 0xb
MyClinicalApp.ViewModels.ChatViewModel.<>c__DisplayClass39_1
<<SendMessage>b__1>d.MoveNext () + 0x:137
System.Runtime.ExceptionServices
ExceptionDispatchInfo.Throw () + 0x:21
System.Runtime.CompilerServices.AsyncMethodBuilderCore
<>c.<ThrowAsync>b__7_0 (Object) + 0x1e
System
Action`1.Invoke (T) + 0x:28
System.Threading.WinRTSynchronizationContext
Invoker.InvokeCore () + 0x:33
System.Runtime.InteropServices
McgMarshal.ThrowOnExternalCallFailed (Int32, RuntimeTypeHandle) + 0x:21
__Interop
ComCallHelpers.Call (__ComObject, RuntimeTypeHandle, Int32) + 0xb:8
__Interop
ForwardComStubs.Stub_15[TThis] (__ComObject, Int32) + 0x:24
Microsoft.AppCenter.Utils
ApplicationLifecycleHelper.<ctor>b__17_1 (Object, UnhandledErrorDetectedEventArgs) + 0x3d

Если кто-то может дать мне какие-либо советы или рекомендации о том, как определить ошибку. спасибо.

PS Я также пытался загрузить символы отладки, но я думаю, что есть ошибка на странице центра приложений, или я, вероятно, что-то делаю не так, проблема в том, что примерно через 20 минут пытается загрузить страницу очищен и ничего не было загружено, этот процесс я попробовал 7 раз, и мне никогда не удавалось загрузить .appxsym

Ответы [ 2 ]

1 голос
/ 09 января 2020

Проблема, которую вы видите, вызвана. NET Собственная цепочка инструментов, убирающая код, чтобы сделать сборку меньше и быстрее. К сожалению,. NET Native не достаточно умен, чтобы понять, когда нужно отразить тип, и может иногда удалять метаданные, которые вам действительно нужны.

Отладка это немного сложная, так как вам нужно попробовать определите, для какого типа нужны именно метаданные, а какие отсутствуют, и отметьте этот тип как необходимый в файле Default.rd.xml, который вы можете найти в папке Properties в вашем проекте UWP. Есть очень полезный он-лайн . NET Собственный инструмент устранения неполадок MissingMetadataException . Который предназначен для автоматической генерации правильного синтаксиса rd. xml для вас. Единственное, что вам нужно сделать, это заполнить имена типов / пространств имен и указать способ отображения типов.

Чтобы точно определить root проблемы, переключите конфигурацию сборки на Release в Visual Студия, а затем запустить приложение и наблюдать, в какой момент оно падает. Иногда это также помогает комментировать и раскомментировать код, чтобы выяснить точное место, когда это происходит. В вашем случае я подозреваю, что это связано с JSON сериализацией и десериализацией, что часто может происходить, поскольку типы используются только для этой единственной цели, а свойства «появляются», как будто нигде не указаны.

0 голосов
/ 10 января 2020

Спасибо Martin Zikmund за помощь в понимании проблемы.

Чтобы обнаружить root ошибки, необходимо было скомпилировать в конфигурации DEBUG с помощью. NET Родной включен (флажок «Свойства проекта> Сборка> Включить». NET «Цепочка встроенных инструментов»). Таким образом, я смог определить, что такое MissingMetadataException, и, таким образом, правильно сформировать файл rd. xml.

В моем случае это было исправлено следующим образом:

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <!--
      An Assembly element with Name="*Application*" applies to all assemblies in
      the application package. The asterisks are not wildcards.
    -->
    <Assembly Name="*Application*" Dynamic="Required All" />

    <Type Name="System.Text.Json.Serialization.Converters.JsonConverterString" Dynamic="Required All" />
    <Type Name="System.Text.Json.Serialization.Converters.JsonConverterBoolean" Dynamic="Required All" />
    <Type Name="System.Text.Json.Serialization.Converters.JsonConverterObject" Dynamic="Required All" />
    <Type Name="System.Text.Json.Serialization.Converters.JsonConverterByteArray" Dynamic="Required All" />
    <Type Name="System.Text.Json.Serialization.Converters.JsonConverterDateTime" Dynamic="Required All" />

  </Application>
</Directives>

Спасибо также Джарвану y Мэтью Уилдену за их время и помощь в его решении.

...