2016-06-12 7 views
7

После недавнего обновления до Xamarin Studio 6 и Mono 4.4.0.182 (работающего на OSX 10.10.5) мы обнаружили, что наше приложение больше не работает (веб-сайт Asp.NET MVC/Razor) , Однако решение компилируется правильно.
Мы попытались вернуться к предыдущим версиям, которые работали - Xamarin Studio 5.10.3 и Mono 4.3.2, и наше приложение все еще работает неправильно. Точно такое же приложение отлично работало до обновления.
Никаких других изменений среды/кода не было сделано, и перезапуска также не работали.Mono - System.TypeLoadException: Не удалось загрузить типы

Ошибки, возникающие после обновления.

первой ошибки (при запуске приложения): System.Reflection.ReflectionTypeLoadException
Это время инициируется SimpleInjector Container.RegisterPackages(). Это работало до обновления Xamarin/Mono, и никаких изменений/обновлений пакета не было применено/сделано.

Could not load type 'System.Net.HttpListener' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 
Could not load type 'System.Net.HttpListenerPrefixCollection' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 
Could not load type 'System.Net.HttpWebRequest' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 
Could not load type 'System.Net.Security.SslStream' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 
Could not load type 'System.Net.WebSockets.ClientWebSocket' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 

StackTrace

at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool) at System.Reflection.Assembly.GetExportedTypes() [0x00000] in /private/tmp/source-mono-4.3.2/bockbuild-xamarin/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/corlib/System.Reflection/Assembly.cs:407 at SimpleInjector.PackageExtensions.GetExportedTypesFrom (System.Reflection.Assembly assembly) [0x00000] in <filename unknown>:0 
at SimpleInjector.PackageExtensions+<>c.<RegisterPackages>b__1_0 (System.Reflection.Assembly assembly) [0x00000] in <filename unknown>:0 
at System.Linq.Enumerable+<SelectManyIterator>c__Iterator5`3[TSource,TCollection,TResult].MoveNext() [0x00059] in <filename unknown>:0 
at System.Linq.Enumerable+WhereSelectEnumerableIterator`2[TSource,TResult].MoveNext() [0x00078] in <filename unknown>:0 
at System.Linq.Buffer`1[TElement]..ctor (IEnumerable`1 source) [0x00087] in <filename unknown>:0 
at System.Linq.Enumerable.ToArray[TSource] (IEnumerable`1 source) [0x00011] in <filename unknown>:0 
at SimpleInjector.PackageExtensions.RegisterPackages (SimpleInjector.Container container, IEnumerable`1 assemblies) [0x000f0] in <filename unknown>:0 
at SimpleInjector.PackageExtensions.RegisterPackages (SimpleInjector.Container container) [0x0002f] in <filename unknown>:0 
at MyApplication.Web.UI.MvcApplication.InitializeContainer (SimpleInjector.Container container) [0x00003] in /Users/*sanitized*/MyApplication.Web.UI/Global.asax.cs:57 

второй Ошибка (После перезагрузки страницы и любые последующие запросы страниц): System.ArgumentException Элемент с тем же ключом уже был добавлен.
Это ссылка на вызов System.Web.Mvc.RouteCollectionExtensions.MapRoute в нашем файле App_Start/RouteConfig.cs (вызывается, в свою очередь, из Global.asax.cs, Application_Start), указывая, что этот файл вызывается как минимум дважды. Опять же, это работало до недавнего обновления Xamarin/Mono.

Может ли кто-либо оказать любую помощь и/или предложения?

EDIT
Откат назад к Mono 4.2.4.4, и ошибка исчезла. Похоже, что в какой-то момент произошла смена, введенная в 4.3.2, которая ввела эту ошибку.

+0

Если отражение в сборках и типах является проблемой в Mono, вы можете легко удалить функцию пакетов Simple Injector и вместо этого сделать это без отражения. Функция пакетов действительно очень полезна для высокодинамичных приложений на основе плагинов. – Steven

+0

То же самое случилось со мной. Все еще не удалось найти решение! – Deepal

+1

Я также вернулся к 4.2.4.4, и он работает. – Deepal

ответ

3

У меня была аналогичная проблема:

Не удалось загрузить тип 'System.Net.HttpListener' из сборки 'System, Version = 4.0.0.0, культура = нейтральной, PublicKeyToken = b77a5c561934e089'

Я решил добавив Mono.Security в исполняемый проект и восстановив его. Надеюсь, что это поможет

+0

Как вы это сделали? –

+0

Я ссылался на сборку из GAC в основном исполняемом проекте с использованием Xamarin Studio IDE. – mauro