Xamarin Studio: сбой при изменении профиля

У меня есть проект PCL, в котором я пытаюсь использовать предоставленную Microsoft PCL-версию System.Net.Http и ее зависимости, все они устанавливаются через Nuget. Все это отлично работает в OSX (я могу создать PCL и успешно использовать его в проектах iOS и Android).

Однако в Windows я сталкиваюсь с проблемой, описанной в этом стеке Поток переполнения, в котором компилятор выдает предупреждения о том, что ссылки не разрешены (предупреждение под №3 в вопросе о переполнении стека) и выдает ошибку с ошибкой о том, что пространство имен Http не существует (ошибка №2 в стеке). Вопрос о переполнении).

Я попытался найти решение, описанное в этом вопросе о переполнении стека, но Xamarin Studio выйдет из строя, если я изменю текущий профиль (в параметрах проекта> Сборка> Общие) с Profile136 (по умолчанию) на Profile78 (предлагаемое решение). Изменение профиля сохраняется в моем проекте, и сбой повторяется, если я пытаюсь перезапустить Xamarin Studio. Исключение и (частичная) трассировка стека показаны ниже.

Есть ли предложения по устранению этого исключения или альтернативное решение проблемы, описанной в ветке переполнения стека?

System.StackOverflowException was unhandled
Message: An unhandled exception of type 'System.StackOverflowException' occurred in ICSharpCode.NRefactory.dll

Трассировки стека:

> ICSharpCode.NRefactory.dll!ICSharpCode.NRefactory.TypeSystem.TopLevelTypeNameComparer.GetHashCode(ICSharpCode.NRefactory.TypeSystem.TopLevelTypeName obj) Unknown
  mscorlib.dll!System.Collections.Generic.Dictionary<ICSharpCode.NRefactory.TypeSystem.TopLevelTypeName,ICSharpCode.NRefactory.TypeSystem.IUnresolvedTypeDefinition>.FindEntry(ICSharpCode.NRefactory.TypeSystem.TopLevelTypeName key)  Unknown
  mscorlib.dll!System.Collections.Generic.Dictionary<ICSharpCode.NRefactory.TypeSystem.TopLevelTypeName,ICSharpCode.NRefactory.TypeSystem.IUnresolvedTypeDefinition>.TryGetValue(ICSharpCode.NRefactory.TypeSystem.TopLevelTypeName key, out ICSharpCode.NRefactory.TypeSystem.IUnresolvedTypeDefinition value) Unknown
  ICSharpCode.NRefactory.dll!ICSharpCode.NRefactory.TypeSystem.Implementation.DefaultUnresolvedAssembly.DefaultResolvedAssembly.GetTypeDefinition(ICSharpCode.NRefactory.TypeSystem.TopLevelTypeName topLevelTypeName)  Unknown
  ICSharpCode.NRefactory.dll!ICSharpCode.NRefactory.TypeSystem.TypeSystemExtensions.GetTypeDefinition(ICSharpCode.NRefactory.TypeSystem.IAssembly assembly, ICSharpCode.NRefactory.TypeSystem.FullTypeName fullTypeName)  Unknown
  ICSharpCode.NRefactory.dll!ICSharpCode.NRefactory.TypeSystem.Implementation.GetClassTypeReference.Resolve(ICSharpCode.NRefactory.TypeSystem.ITypeResolveContext context)  Unknown
  ICSharpCode.NRefactory.dll!ICSharpCode.NRefactory.TypeSystem.Implementation.DefaultUnresolvedAssembly.DefaultResolvedAssembly.GetTypeDefinition(ICSharpCode.NRefactory.TypeSystem.TopLevelTypeName topLevelTypeName)  Unknown
  ICSharpCode.NRefactory.dll!ICSharpCode.NRefactory.TypeSystem.TypeSystemExtensions.GetTypeDefinition(ICSharpCode.NRefactory.TypeSystem.IAssembly assembly, ICSharpCode.NRefactory.TypeSystem.FullTypeName fullTypeName)  Unknown
  ICSharpCode.NRefactory.dll!ICSharpCode.NRefactory.TypeSystem.Implementation.GetClassTypeReference.Resolve(ICSharpCode.NRefactory.TypeSystem.ITypeResolveContext context)  Unknown
[... : Removed for brevity; repeat the previous three stack frames about 1000 times]
  The maximum number of stack frames supported by Visual Studio has been exceeded.  

person JonathonW    schedule 29.04.2014    source источник


Ответы (1)


Спасибо за этот ответ на форумах Xamarin и этот документ об известных проблемах Nuget, мне, наконец, удалось решить эту проблему к моему удовлетворению. Основные шаги:

  1. Удалите пакеты Nuget, добавленные для поддержки HTTPClient и Async (включая пакеты совместимости BCL). Кроме того, при необходимости удалите их ссылки (плагин Nuget Xamarin Studio не сделал этого для меня, оставив неработающие ссылки после удаления пакетов).

  2. Переключитесь на Profile7 вместо Profile158 (по умолчанию в шаблоне проекта Xamarin Studio для Mac PCL).

Это оставляет мне проект PCL, который успешно строится, а профиль Profile7 должен поддерживать Xamarin.iOS и Xamarin.Android (а также подмножество WinRT .NET и полную платформу .NET). Нет поддержки Windows Phone (для этого мне понадобится Profile78, а Profile78 не включает HttpClient или поддержку async / await), но в моем случае это не нарушает договоренности (мы даже не близки к рассмотрению версии Windows Phone нашей программное обеспечение).

person JonathonW    schedule 06.05.2014