加载程序集时的monodroid异常 - >无法加载程序集System.Net

时间:2012-02-29 22:16:09

标签: android .net mono xamarin.ios xamarin.android

我有一个带有一些业务功能的小型程序集(调用webservice来回收一些数据并将数据放回列表中)。这个组件是用visual studio开发和编译的。

我参加了程序集并在一个iPhone应用程序项目中使用MonoDevelop和MonoTouch引用了这个程序集。它运作得很好。

现在,我使用MonoDroid为MonoDevelop中的Android应用程序制作了一个新项目。代码编译完美。但是当我想在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程序集中有System.Net程序集。我在我的项目中引用了系统程序集。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

  

据我所知,Mono在系统组装中有System.Net组件。

没有。 System.dll 程序集中有System.Net 名称空间

MonoTouch中有没有 System.Net.dll,我认为在Mono for Android中也没有(我上次没有检查过; - )

Silverlight中有一个System.Net.dll。它包含WebClientWebRequestWebResponse ...,它们位于常规框架(包括Android的MonoTouch和Mono)部分。

常规 .NET框架有一个System.Net.dll - 但它与Silverlight中提供的完全不同。这令人困惑,是IMO的一个非常糟糕的决定。

  

我参加了程序集并在iPhone应用程序项目中使用MonoDevelop和monotouch引用了此程序集。

使用模拟器时可能在MonoTouch中工作,因为正在使用JIT(只要不需要代码,就会忽略缺少的引用)。但是,如果您尝试链接您的代码(默认情况下没有链接)在模拟器上尝试为设备构建,那么我非常有信心您会遇到类似的错误消息(即MonoTouch链接器和/或AOT编译器会抱怨缺少引用)。

简而言之:您需要针对Android SDK程序集针对MonoTouch和Mono重新编译源代码。这是唯一的安全方法,可确保您不会缺少类型引用(或添加不存在的程序集引用)。