исключение monodroid при загрузке сборок -> Не удалось загрузить сборку System.Net - PullRequest
2 голосов
/ 01 марта 2012

У меня небольшая сборка с некоторой бизнес-функциональностью (вызывая веб-сервис, получая некоторые данные и возвращая их обратно в список). Эта сборка была разработана и скомпилирована с визуальной студией.

Я взял сборку и сослался на эту сборку с MonoDevelop и MonoTouch в проекте приложения для iPhone. Работает отлично.

Теперь я сделал новый проект для приложения Android в MonoDevelop с MonoDroid. Код компилируется идеально. Но когда я хочу развернуть приложение на Android, я получаю это исключение:

/Library/Frameworks/Mono.framework/External/xbuild/Novell/Novell.MonoDroid.Common.targets:
Error: Exception while loading assemblies: 
System.IO.FileNotFoundException: Could not load assembly 'System.Net, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'. 
Perhaps it doesn't exist in the Mono for Android profile?
File name: 'System.Net.dll'
  at Monodroid.Tuner.MonoDroidResolver.Resolve (Mono.Cecil.AssemblyNameReference reference, Mono.Cecil.ReaderParameters parameters) [0x00000] in <filename unknown>:0 
  at Monodroid.Tuner.MonoDroidResolver.Resolve (Mono.Cecil.AssemblyNameReference reference) [0x00000] in <filename unknown>:0 
  at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences (System.Collections.Generic.List`1 assemblies, Mono.Cecil.AssemblyDefinition assembly) [0x00000] in <filename unknown>:0 
  at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences (System.Collections.Generic.List`1 assemblies, Mono.Cecil.AssemblyDefinition assembly) [0x00000] in <filename unknown>:0 
  at Xamarin.Android.Tasks.ResolveAssemblies.Execute () [0x00000] in <filename unknown>:0 

Насколько я знаю, Mono имеет сборку System.Net в сборке System. На сборку системы есть ссылки в моем проекте.

Есть идеи?

1 Ответ

4 голосов
/ 01 марта 2012

Насколько я знаю, у Mono есть сборка System.Net в сборке системы.

Нет. Внутри System.dll сборка .

есть System.Net пространство имен .

В MonoTouch есть нет System.Net.dll, и я не думаю, что он есть в Mono для Android (в прошлый раз я не проверял; -)

В Silverlight есть файл System.Net.dll. Он содержит WebClient, WebRequest, WebResponse ..., то есть в обычной платформе (включая MonoTouch и Mono для Android) части System.dll.

Обычная .NET Framework имеет System.Net.dll - но она полностью отличается от той, что предусмотрена в Silverlight. Это сбивает с толку и было очень плохим решением ИМО.

Я взял сборку и сослался на эту сборку с MonoDevelop и monotouch в проекте приложения для iPhone.

Возможно, он работает в MonoTouch при использовании симулятора , поскольку используется JIT (и пропущенные ссылки будут игнорироваться, если код не нужен). Однако, если вы попытаетесь связать свой код (по умолчанию он не связан) на симуляторе или и попытаться создать его для устройств, то я очень уверен, что вы получите похожее сообщение об ошибке (т.е. компоновщик MonoTouch и / или компилятор AOT будут жаловаться на отсутствующую ссылку).

Вкратце: вам нужно пересобрать исходный код для сборок MonoTouch и Mono for Android SDK. Это единственный безопасный способ убедиться, что вы не пропустите ссылки на типы (или добавите ссылки на сборки, которых не существует).

...