我有一个带有一些业务功能的小型程序集(调用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程序集。我在我的项目中引用了系统程序集。
有什么想法吗?
答案 0 :(得分:4)
据我所知,Mono在系统组装中有System.Net组件。
没有。 System.dll 程序集中有System.Net
名称空间。
MonoTouch中有没有 System.Net.dll,我认为在Mono for Android中也没有(我上次没有检查过; - )
Silverlight中有一个System.Net.dll。它包含WebClient
,WebRequest
,WebResponse
...,它们位于常规框架(包括Android的MonoTouch和Mono)部分。
常规 .NET框架有一个System.Net.dll - 但它与Silverlight中提供的完全不同。这令人困惑,是IMO的一个非常糟糕的决定。
我参加了程序集并在iPhone应用程序项目中使用MonoDevelop和monotouch引用了此程序集。
使用模拟器时可能在MonoTouch中工作,因为正在使用JIT(只要不需要代码,就会忽略缺少的引用)。但是,如果您尝试链接您的代码(默认情况下没有链接)在模拟器上或尝试为设备构建,那么我非常有信心您会遇到类似的错误消息(即MonoTouch链接器和/或AOT编译器会抱怨缺少引用)。
简而言之:您需要针对Android SDK程序集针对MonoTouch和Mono重新编译源代码。这是唯一的安全方法,可确保您不会缺少类型引用(或添加不存在的程序集引用)。