Я подозреваю, что это связано с эталонными сборками.
Я использую Unity 3D для приложения Android, которое взаимодействует с SharePoint Online.
После обновления Unity 2022.3.2f1 до 2023.2.10f1 я получаю сообщение об ошибке:
Конструктор по умолчанию не найден для типа Microsoft.SharePoint.Client.ContentTypeId
Ошибка возникает при попытке прочитать список SharePoint.
Ошибка отображается только в Android Logcat при построении на устройстве (среда выполнения).
Код: Выделить всё
2024/02/22 14:18:19.515 21552 21581 Error Unity MissingMethodException: Default constructor not found for type Microsoft.SharePoint.Client.ContentTypeId
2024/02/22 14:18:19.515 21552 21581 Error Unity at System.RuntimeType.CreateInstanceMono (System.Boolean nonPublic, System.Boolean wrapExceptions) [0x00000] in :0
2024/02/22 14:18:19.515 21552 21581 Error Unity at Microsoft.SharePoint.Client.ScriptTypeMap.CreateObjectFromScriptType (System.String scriptType, Microsoft.SharePoint.Client.ClientRuntimeContext context) [0x00000] in :0
2024/02/22 14:18:19.515 21552 21581 Error Unity at Microsoft.SharePoint.Client.JsonReader.ReadJsonObject (System.Type fallbackType) [0x00000] in :0
2024/02/22 14:18:19.515 21552 21581 Error Unity at Microsoft.SharePoint.Client.JsonReader.ReadKeyValue () [0x00000] in :0
2024/02/22 14:18:19.515 21552 21581 Error Unity at Microsoft.SharePoint.Client.ListItem.InitNonPropertyFieldFromJson (System.String peekedName, Microsoft.SharePoint.Client.JsonReader reader) [0x00000] in :0
2024/02/22 14:18:19.515 21552 21581 Error Unity at Microsoft.SharePoint.Client.ClientObject.FromJson (Microsoft.SharePoint.Client.JsonReader reader) [0x00000]
Он прекрасно работает в редакторе Unity в Windows.
Ошибка возникает только тогда, когда он «встроен» в устройство Android.
Другие функции SharePoint, такие как загрузка/загрузка файла, получение списка онлайн-папок или запись в список SharePoint, работают.
Единственная проблема — при попытке прочитать список SharePoint.
Весь этот код работал ранее более года и до сих пор работает в «старой» сборке.
Код: Выделить всё
public static void ReadListItem(string site, string listName, string camlViewXml)
{
clientContext = GetNewClientContext(site);
Microsoft.SharePoint.Client.List myList = clientContext.Web.Lists.GetByTitle(listName);
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = camlViewXml;
tempListColl = myList.GetItems(camlQuery);
clientContext.Load(tempListColl);
try
{
clientContext.ExecuteQuery();
}
catch (WebException ex)
{
Debug.Log("List Update stopped:" + ex.Message);
}
catch (ServerException ex) { Debug.Log("List Update stopped:" + ex.Message); return; }
}
Этот код отлично работает в старой версии Unity с .Net Standard 2.0Код работает нормально и запускается в самом редакторе Unity.
В новом редакторе (который поддерживает только .net Standard 2.1) он создает ошибку при сборке и запуске на устройство.
Я считаю, что это как-то связано со ссылками и зависимостями .dll, а также с тем, что у некоторых есть проблемы со стандартом 2.1.
Я не вижу никаких упоминаний об ошибке где-либо еще. Насколько я могу судить из документации Microsoft, эта функция по-прежнему должна работать в библиотеке CSOM.
Ошибка возникает при попытке просто получить элемент списка SharePoint, что на самом деле является первым шагом.
Я использовал Nuget для обновления пакетов, но проблема не устранена. Если я не сделал здесь что-то не так?
Подробнее здесь: https://stackoverflow.com/questions/780 ... pe-microso