#linq #xamarin #xelement
#linq #xamarin #xelement
Вопрос:
Метод, который я использовал для запроса XElement, работает в Windows, но не в Xamarin Android:
using System.Xml;
using System.Xml.Linq;
using System.Linq;
public string ValidateLicense()
{
XElement xEl;
string sMessage;
Model.clsWebServiceFunctions cSvc = new Model.clsWebServiceFunctions();
sMessage = cSvc.QueryWEB_ValidateLicense();
xEl = cSvc.ServiceGetData(clsSettings.LicensingUrl, sMessage);
var vResult = from results in xEl.DescendantsAndSelf("Result")
select results;
return vResult.First().Element("LicensingResult").Value;
}
Сообщение, которое я получаю, является
Метод
'First' not found in type
‘IEnumerable’1’
Похоже, это связано с тем, что Xamarin не поддерживает этот метод?!
У меня много похожих запросов в моем приложении, так что может кто-нибудь порекомендовать альтернативу, которая будет работать в Xamarin? Я мог бы предложить это, но не знаю хорошего решения.
Комментарии:
1. Это должно сработать. Вы получаете ошибку сборки или ошибку времени выполнения?
2. Это ошибка времени выполнения. Он отлично компилируется и работает в моем тестовом приложении Windows.
3. есть ли у вас система. Ядро включено в ваши ссылки?
4. Да, я это проверил. В настоящее время похоже, что Xamarin не поддерживает этот метод, поэтому я действительно ищу альтернативный метод для запроса этого XML
Ответ №1:
У меня аналогичная проблема на iOS.
Похоже, это проблема с тем, что методы расширения Linq для IEnumerable не загружаются.
Ошибка возникает в MvvmCross, который предназначен для работы с мобильными платформами, поддерживаемыми Xamarin. Проблема изначально не возникает при развертывании нового приложения, для манифестации требуется некоторое время, т. Е. требуется несколько дней разработки, попытка повторного запуска на симуляторе.
Поэтому я считаю, что это проблема с привязкой к Xamarin. [Редактировать]: Больше нет, см. Ниже.
http://forums.xamarin.com/discussion/19483/pcl-linq-problem-on-ios-vs2013-sp2 — Здесь пока нет ответов.
[Редактировать] Хорошо, итак, я ссылался на библиотеку DLL NET FX 3.5. изменение ссылочной сборки на NET 4.0, казалось, решило проблему. Обратите внимание, что в выходных данных приложения вы можете увидеть это при запуске. Это плохо:
Loaded assembly: /Users/mike/Library/Caches/Xamarin/mtbs/builds/XamTestTouch2/7da682ee-1ab5-4b07-b745-c3c558a10329/assemblies/System.Core.dll [External]
Это хорошо:
Loaded assembly: /Developer/MonoTouch/usr/lib/mono/2.1/System.Core.dll [External]
Возможно, потребуется удалить кэши /Xamarin /mtbs /builds/AppName /guid00-00000-0000.. папка после исправления ваших ссылок, чтобы все снова заработало.
Комментарии:
1. Я не тестировал это, поскольку я отошел от Xamarin из-за такого рода проблем. Спасибо за ответ, и я надеюсь, что это будет полезно кому-то еще.
2. Спасибо за положительный отзыв. Что вы используете вместо Xamarin? Мне пришлось потратить несколько недель на то, чтобы заставить вещи работать на всех платформах, но я все еще думаю, что это того стоит.
3. Я перешел на машинный код. Я хотел использовать Xamarin для повторного использования кода, но поскольку мне пришлось переписать весь мой синтаксический анализ данных, чтобы обойти вышеупомянутую проблему, это не принесло достаточной пользы для такого простого проекта, и если бы я застрял на следующем (гораздо более сложном) проекте, тогда у меня могли бы быть реальные проблемы. По крайней мере, с машинным кодом есть много помощи.
4. Я понимаю, к чему вы клоните. Я немного поиграл, чтобы выработать волшебную формулу, которая работает. Кажется, что в реализациях mono есть все необходимое, это просто проверки ссылок во время компиляции, которые все портят. Это означает несколько интерфейсных классов здесь и там, чтобы заставить все работать. Удачи, Джеймс.
5. @MichaelRibbons где мне установить эти ссылки на сборку? Ссылка на System. Ядро уже существует в проекте iOS. Код отлично работает в Android, но выдает исключение в iOS.