System.TypeLoadException: не удалось загрузить тип System. Net .HttpStatusCode, netstandard, при декодировании пользовательского атрибута: (null) - PullRequest
0 голосов
/ 22 января 2020

Проблема возникает между проектом типа Xamarin. IOS и библиотекой .NetStandard2.0. Я создал небольшое решение ( ссылка здесь ), демонстрирующее проблему. Для этого в проекте Xamarin используется ньюгетик Newtonsoft.

Ситуация: в проекте .NetStandard у меня есть один объект, содержащий одно свойство (в моем случае, свойство типа HttpStatusCode) с пользовательским атрибутом. определение значения по умолчанию для этого свойства.

public class TestObject
{
    [DefaultValue(HttpStatusCode.OK)]
    public HttpStatusCode Code { get; set; }
}

В проекте Xamarin я создал один тест, в котором был создан объект типа, созданного в проекте .NetStandard, и попытался его сериализовать.

[Test]
public void Test()
{
    TestObject obj = new TestObject(code: HttpStatusCode.Accepted);
    JsonConvert.SerializeObject(obj);
}

При запуске теста возвращается следующая ошибка: System.TypeLoadException: Could not load type System.Net.HttpStatusCode, netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51 while decoding custom attribute: (null )

В моей ситуации требуется, чтобы архитектура, определенная в csproj, имела тип * ARMv7 + ARM64 * для ради совместимости со старыми Ipads, которые мы должны поддерживать. Я упоминаю об этом, потому что знаю, что выбор Поведение компоновщика до Ссылка всех и Поддерживаемых архитектур до ARM64 делает тестовый проход без проблем.

Редактировать

Ответ на вопрос Почему нужно использовать 2 проекта : На самом деле решение, представленное в этом посте, является лишь небольшим отрывком из гораздо большего проекта. В этом проекте мы предоставляем Windows версию (.NetCore 3.1) и IOS версию (Xamarin. IOS) приложения. Чтобы разделить наши модели между этими двумя различными проектами, мы хотели бы использовать библиотеку типов .NetStandard вместо разделения этой библиотеки на проекты Windows и IOS. Мы открыты для других предложений архитектурного решения, если это может решить нашу проблему, но пока это все, что у нас есть.

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

Заранее спасибо за помощь

...