#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, которую затем можно преобразовать в требуемые структуры / классы данных на верхнем уровне.
Спасибо всем, кто пытался помочь здесь.