Xamarin Android(Mac) persisting error: "Could not load System.Drawing"
Xamarin Android(Mac) persisting error: "Could not load System.Drawing"
首先要明确的是,这是我尝试完成的第一个 Android 项目,所以我对这一切还是很陌生。
我一直被这个非常烦人的问题所困扰,即使删除了很多东西,我也无法再编译我的项目。在我的项目中的某个时刻,我添加了 'System' 命名空间以使用 'Exception' 关键字(以测试数据库连接)。在此之前,一切都运行良好。但是在尝试编译之后我得到了错误:
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets:错误:加载程序集时出现异常:System.IO.FileNotFoundException:无法加载程序集'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' .也许它不存在于 Android 配置文件的 Mono 中?
文件名:'System.Drawing.dll'
所以我只是在上面添加了 'using System.Drawing' 但后来我读到 Xamarin Android 不支持它。所以我再次删除它并尝试删除我为停止获取此异常所做的一切。然后,即使我将所有内容都注释掉,这个错误也会永远卡住。我可以写 'using System.Drawing' 而系统不会给该行一个错误,我认为这很奇怪,因为它在参考文献中无处可寻。我也真的不明白,因为我不画任何东西,也不认为使用 System.Drawing 中的任何东西。每当我引用 'System' 包时,我都会收到此错误,我不能没有,因为某些 android 文件依赖于它。我现在已经失去了几个小时而没有任何进展,基本上我已经走到了尽头。
这是我现在的 MainActivity.cs 文件,经过缩小,这是我唯一的 .cs 文件:
using Android.Graphics;
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using MySql.Data.MySqlClient;
using System;
namespace MapApp
{
[Activity(Label = "MapApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity, IOnMapReadyCallback
{
GoogleMap GMap;
/// database
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
}
private void SetUpMap()
{
if (GMap == null)
{
FragmentManager.FindFragmentById<MapFragment>(Resource.Id.googlemap).GetMapAsync(this);
}
}
public void OnMapReady(GoogleMap map)
{
GMap = map;
GMap.SetLatLngBoundsForCameraTarget(new LatLngBounds(
new LatLng(51.873176, 4.393930),
new LatLng(51.994576, 4.598036)));
GMap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(new LatLng(51.917879,4.481134),13));
/*MarkerOptions markerOpt1 = new MarkerOptions();
markerOpt1.SetPosition(new LatLng(51.917879, 4.481134));
markerOpt1.SetTitle("Vimy Ridge");
GMap.AddMarker(markerOpt1);*/
CircleOptions dangerZone = new CircleOptions();
dangerZone.InvokeCenter(new LatLng(51.917879, 4.481134));
dangerZone.InvokeRadius(100);
dangerZone.InvokeFillColor(0x7F00FF00);
dangerZone.InvokeStrokeWidth(0);
GMap.AddCircle(dangerZone);
}
}
}
这是我的参考资料和包的图片。(里面有很多 Xamarin 包,因为加载 Google 地图需要这些):
这里是我的项目结构的另一张图片,如果它可以帮助识别问题。
我已尝试删除我的所有包并清理我的 Big/Debug 文件夹并重建所有内容,但错误仍然存在。
一切正常,但现在我无法再构建它了。我写了一次 "using System" ,得到了这个错误,然后再也无法摆脱这个错误了。
我真的不想第二次重新启动我的项目,在每小时收到未知错误后,我们将不胜感激。
由于使用诊断日志记录,我发现了问题。
结果 'MySql.Data' 包加载了 'System.Drawing' 这当然在 Xamarin.Android.
中不受支持
Dependency System.Drawing, Version=4.0.0.0, Culture=neutral,
Required by MySql.Data, Version=6.9.9.0, Culture=neutral
感谢 Lexi Li 提供了我非常需要的提示!
首先要明确的是,这是我尝试完成的第一个 Android 项目,所以我对这一切还是很陌生。 我一直被这个非常烦人的问题所困扰,即使删除了很多东西,我也无法再编译我的项目。在我的项目中的某个时刻,我添加了 'System' 命名空间以使用 'Exception' 关键字(以测试数据库连接)。在此之前,一切都运行良好。但是在尝试编译之后我得到了错误:
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets:错误:加载程序集时出现异常:System.IO.FileNotFoundException:无法加载程序集'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' .也许它不存在于 Android 配置文件的 Mono 中? 文件名:'System.Drawing.dll'
所以我只是在上面添加了 'using System.Drawing' 但后来我读到 Xamarin Android 不支持它。所以我再次删除它并尝试删除我为停止获取此异常所做的一切。然后,即使我将所有内容都注释掉,这个错误也会永远卡住。我可以写 'using System.Drawing' 而系统不会给该行一个错误,我认为这很奇怪,因为它在参考文献中无处可寻。我也真的不明白,因为我不画任何东西,也不认为使用 System.Drawing 中的任何东西。每当我引用 'System' 包时,我都会收到此错误,我不能没有,因为某些 android 文件依赖于它。我现在已经失去了几个小时而没有任何进展,基本上我已经走到了尽头。
这是我现在的 MainActivity.cs 文件,经过缩小,这是我唯一的 .cs 文件:
using Android.Graphics;
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using MySql.Data.MySqlClient;
using System;
namespace MapApp
{
[Activity(Label = "MapApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity, IOnMapReadyCallback
{
GoogleMap GMap;
/// database
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
}
private void SetUpMap()
{
if (GMap == null)
{
FragmentManager.FindFragmentById<MapFragment>(Resource.Id.googlemap).GetMapAsync(this);
}
}
public void OnMapReady(GoogleMap map)
{
GMap = map;
GMap.SetLatLngBoundsForCameraTarget(new LatLngBounds(
new LatLng(51.873176, 4.393930),
new LatLng(51.994576, 4.598036)));
GMap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(new LatLng(51.917879,4.481134),13));
/*MarkerOptions markerOpt1 = new MarkerOptions();
markerOpt1.SetPosition(new LatLng(51.917879, 4.481134));
markerOpt1.SetTitle("Vimy Ridge");
GMap.AddMarker(markerOpt1);*/
CircleOptions dangerZone = new CircleOptions();
dangerZone.InvokeCenter(new LatLng(51.917879, 4.481134));
dangerZone.InvokeRadius(100);
dangerZone.InvokeFillColor(0x7F00FF00);
dangerZone.InvokeStrokeWidth(0);
GMap.AddCircle(dangerZone);
}
}
}
这是我的参考资料和包的图片。(里面有很多 Xamarin 包,因为加载 Google 地图需要这些):
这里是我的项目结构的另一张图片,如果它可以帮助识别问题。
我已尝试删除我的所有包并清理我的 Big/Debug 文件夹并重建所有内容,但错误仍然存在。
一切正常,但现在我无法再构建它了。我写了一次 "using System" ,得到了这个错误,然后再也无法摆脱这个错误了。
我真的不想第二次重新启动我的项目,在每小时收到未知错误后,我们将不胜感激。
由于使用诊断日志记录,我发现了问题。 结果 'MySql.Data' 包加载了 'System.Drawing' 这当然在 Xamarin.Android.
中不受支持Dependency System.Drawing, Version=4.0.0.0, Culture=neutral,
Required by MySql.Data, Version=6.9.9.0, Culture=neutral
感谢 Lexi Li 提供了我非常需要的提示!