Кроссплатформенные проекты и классы данных из nugets

#c# #xamarin #nuget #cross-platform

#c# #xamarin #nuget #кросс-платформенный

Вопрос:

Мы создаем nugets для Android и iOS, которые оба выдают результат в виде класса, содержащего только данные.

 public struct ResultData
{
    public double dScore;
    public string strPhrase;
    public Info[] details;
}
  

Эти данные генерируются как Android, так и iOS nuget.

Мой вопрос в том, как объявить эту структуру / класс данных в коде, нейтральном к платформе, чтобы я мог правильно захватить его из вызывающего метода независимым от платформы способом?

Возможно ли это?


Редактировать: дополнительная информация

Как указано в названии, я нахожусь в контексте кросс-платформенного проекта, то есть мобильного проекта. Итак, у нас есть три уровня — нейтральный для платформы уровень, уровень Android и уровень iOS.

Каждый из уровней, зависящих от платформы (Android и iOS), импортирует собственную библиотеку nuget, зависящую от платформы.

Оба этих nugets библиотеки создадут ResultData объект, который будет использоваться нейтральным уровнем платформы.

Надеюсь, это поможет.


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

Попробовал предложенное решение по созданию отдельной библиотеки для хранения определения этой структуры данных.

Однако компиляция систематически завершается ошибкой с такими ошибками, как

Class.cs(118,16,118,32): error CS0012: The type 'ValueType' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Так что я не могу пойти по этому пути!

Комментарии:

1. Стандарт .NET не зависит от платформы.

2. Nugets, созданные для Android и iOS, зависят от платформы — отсюда и мой вопрос!

3. Если это просто библиотека классов, не содержащая ничего специфичного для какой-либо платформы, сделайте ее целевой. ЧИСТЫЙ стандарт, тогда вам не нужно создавать отдельные для каждой платформы. Вы упомянули «нейтральный к платформе код» … итак, у вас уже есть какая-то нейтральная к платформе библиотека / проект? Не совсем понятно, что вы имеете в виду.

4. Описание обновлено

5. «Оба этих nugets библиотеки создадут объект resultData, который будет использоваться нейтральным уровнем платформы». … хорошо, так почему вы не можете просто переместить определение класса resultData в нейтральный уровень? Что-то конкретное мешает этому? Это потому, что слои Android / iOS не ссылаются на этот слой, а также должны ссылаться на resultData? В этом случае, возможно, вам нужна библиотека «сущностей», которая не зависит от платформы и на которую ссылаются все другие ваши компоненты, чтобы вы могли совместно использовать общие объекты для всех них.

Ответ №1:

Результат всех моих исследований — это определенно невозможно сделать с актуальной версией xamarin и VS2019.

Впоследствии мне пришлось отказаться от этого подхода и использовать другую стратегию для передачи информации по разным уровням — строку JSON, которую затем можно преобразовать в требуемые структуры / классы данных на верхнем уровне.

Спасибо всем, кто пытался помочь здесь.