【问题标题】:monodroid exception while loading assemblies -> Could not load assembly System.Net加载程序集时出现 monodroid 异常-> 无法加载程序集 System.Net
【发布时间】:2012-02-29 22:16:08
【问题描述】:

我有一个具有一些业务功能的小型程序集(调用 Web 服务来接收一些数据并将数据返回到列表中)。该程序集是使用 Visual Studio 开发和编译的。

我在一个 iPhone 应用程序项目中使用了该程序集并使用 MonoDevelop 和 MonoTouch 引用了该程序集。效果很好。

现在我在 MonoDevelop 中使用 MonoDroid 为 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 程序集。我的项目中引用了系统程序集。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    据我所知,Mono 在系统程序集中有 System.Net 程序集。

    没有。 System.dll assembly 中有一个System.Net namespace

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

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

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

    我在一个 iPhone 应用项目中使用了 MonoDevelop 和 monotouch 并引用了这个程序集。

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

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

    【讨论】:

    • Mono For Android 中有一个 System.Net.HttpWebRequest - 我用过。问题可能出在链接器上。如果是,您可以使用 AndroidLinkSkip:docs.xamarin.com/android/advanced_topics/linking 您也可以尝试将您的库编译为 Android 类库的 Mono,看看您遇到了什么错误(如果有)。
    • @Matthew 你把事情搞糊涂了:Android 的 Mono 中有一个 System.Net.HttpWebRequest...当然有 :-) 但它在 @ System.dll 程序集的 987654326@ 命名空间 - IOW 不在 System.Net.dll 程序集内。最初的错误是试图引用后来的程序集,因为它存在于 M4A 中。
    • 你让我到了那里;)你需要看看你在 system.net.dll 中引用了什么。似乎没有太多。尝试在不引用程序集的情况下编译您的库,看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多