You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac版Visual Studio中Xamarin项目缺失System.Drawing命名空间求助

解决Mac版VS中旧Xamarin项目缺失System.Drawing.PointF的问题

你碰到的这个问题其实挺常见的——旧Xamarin Studio依赖的System.Drawing是Mono框架提供的实现,但现在新版Visual Studio for Mac基于的.NET环境(尤其是苹果平台的Xamarin.iOS/Xamarin.Mac)已经不再默认包含这个命名空间,而且官方也不推荐跨平台项目继续依赖它。针对你需要的PointF结构,这里有两个可行的方案:

方案一:使用苹果平台原生的CGPoint(推荐)

这是当前Xamarin/.NET MAUI在苹果平台的标准做法,完全替代PointF的功能,还更贴合平台生态:

  • 对于Xamarin.iOS或Xamarin.Mac项目,直接用CoreGraphics.CGPoint结构,它的X、Y属性和PointF完全一致
  • 如果需要和旧代码里的PointF互相转换,只需要简单赋值:
    // PointF转CGPoint
    var cgPoint = new CoreGraphics.CGPoint(pointF.X, pointF.Y);
    // CGPoint转PointF
    var pointF = new System.Drawing.PointF(cgPoint.X, cgPoint.Y);
    
  • 要是你的代码在共享项目里,可以用条件编译统一类型:
    #if __IOS__ || __MAC__
    using PointType = CoreGraphics.CGPoint;
    #else
    // 其他平台可对应定义,比如Windows用System.Drawing.PointF
    using PointType = System.Drawing.PointF;
    #endif
    
    // 后续直接用PointType即可
    var myPoint = new PointType(10.5f, 20.5f);
    

方案二:安装System.Drawing.Common NuGet包(仅旧代码兼容)

如果必须保留原有System.Drawing.PointF的代码,也可以通过NuGet包获取,但要注意兼容性限制:

  1. 在VS for Mac里右键项目 → 管理NuGet包
  2. 搜索System.Drawing.Common,安装和项目.NET版本匹配的包(比如旧Xamarin项目用.NET Standard 2.0,就选对应版本)
  3. 安装后如果仍报错,编辑项目文件(.csproj),添加以下配置启用Mac平台的兼容支持:
    <PropertyGroup>
      <EnableSystemDrawingUnixSupport>true</EnableSystemDrawingUnixSupport>
    </PropertyGroup>
    

⚠️ 提醒:官方已标记System.Drawing.Common在非Windows平台为过时特性,未来版本可能不再支持,这个方案只适合临时兼容旧代码,长期建议迁移到平台原生类型。

内容的提问来源于stack exchange,提问作者koviroli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:07:16