新闻详情

新闻详情

首页 / 资讯中心 / 详情

VS2019 for mac里用c#开发Mac OS应用 避坑 和 源码

发布时间:2026/9/30 8:20:13来源:尧图网络
VS2019 for mac里用c#开发Mac OS应用 避坑 和 源码
首先 Visual Studio 2019 for mac 有很多版本必须一对一和Xcode的版本对应才能正确开发 否则编译都报错本人xcode11.1 、13.2.1、12.5.1 轮着配 VS2019 for Mac 8.4、8.10 编译都报错。提醒大家不要以为是自己问题就是两者版本不适配。本人最后试出来 vs2019 for mac 8.3.1 配 Xcode 11.2 。 亲测正常了。搞了一礼拜 微软还不让正常下载旧版旧版从微软订阅频道下载要收费的。 现在最新版VS for Mac 又要升级自己的mac系统这升级就会破坏本机目前使用一些mac应用的环境导致又要下载新版应用。果断不能如此劝大家不要踩坑给Visual Studio for Mac开发苹果应用的初学者建议1、 VS版本和Xcode要对应。 不出错就用本人亲测可用的版本2、mac OS系统里卸载应用就是卸不干净无论是360 还是 腾讯的mac维护应用现在用deepseek 它会回答 清理的终端代码就可以清干净。 VS 和 Xcode是附件太占硬盘容量掉了它本体其它东西还在mac电脑里如果你需要卸载整个 Visual Studio for Mac 和所有 Xamarin 组件可以下载并使用微软官方提供的卸载脚本。脚本下载地址为https://raw.githubusercontent.com/MicrosoftDocs/visualstudio-docs/master/mac/resources/uninstall-vsmac.sh。下载后在终端中通过chmod x赋予执行权限后运行即可。手动删干净xcode ,本人上篇文章 点这里Visual Studio Mac 开发Mac应用的原理在vs中写代码事件在xcode中摆放控件如button label textbox这两个软件因为适配就会同步更新两边的更改微软的一步步教的步骤 HelloMac - 演练 - Xamarin | Microsoft Learn在vs for mac中获取本机电池的代码using System; using Xamarin.Essentials; namespace helloworld1 { public class BatteryInfoHelper { public static double GetBatteryPercent() { double level Battery.ChargeLevel; level level * 100; return level; } public static string getState() { // 根据状态执行逻辑 switch (Battery.State) { case BatteryState.Charging: // 正在充电 return 充电中;//break; case BatteryState.Full: // 电池已满 return 电量已满; //break; case BatteryState.Discharging: case BatteryState.NotCharging: // 正在放电或未充电 return 正在放电或未充电; //break; case BatteryState.NotPresent: // 设备无电池如台式机 return 本机无电池; //break; case BatteryState.Unknown: // 无法检测状态 return 无法检测状态; // break; default: return 状态未知; } } public static void GetBatteryStatus() { // 1. 获取当前电量百分比 (0.0 到 1.0) // 如果连接交流电或无电池通常返回 1.0 double level Battery.ChargeLevel; // 2. 获取电池状态 BatteryState state Battery.State; // 3. 获取电源来源 BatteryPowerSource source Battery.PowerSource; // 输出调试信息 //Debug.WriteLine($电池电量: {level * 100}%); //Debug.WriteLine($电池状态: {state}); //Debug.WriteLine($电源来源: {source}); // 根据状态执行逻辑 switch (state) { case BatteryState.Charging: // 正在充电 break; case BatteryState.Full: // 电池已满 break; case BatteryState.Discharging: case BatteryState.NotCharging: // 正在放电或未充电 break; case BatteryState.NotPresent: // 设备无电池如台式机 break; case BatteryState.Unknown: // 无法检测状态 break; } } } }使用上述代码需要Xamarin.Essential包 可以在VS for Mac 里用nutget 在线获取。VS for mac 开发mac播放声音/* * * var player new AudioPlayerHelper(); // 播放包内资源假设 Resources 文件夹中有 sound.mp3 player.PlayFromBundle(sound, mp3); // 或播放绝对路径文件 player.PlayFromFile(/Users/你的用户名/Music/example.mp3) * * * */ using System; using AVFoundation; using Foundation; namespace helloworld1 { public class MacAudioPlayer { // 必须保持强引用否则播放可能被 GC 中断 private AVAudioPlayer _audioPlayer; /// summary /// 从绝对文件路径播放声音 /// /summary public void PlayFromFile(string filePath) { var url NSUrl.FromFilename(filePath); Play(url); } /// summary /// 从应用程序包资源中播放声音 /// 例如资源文件名为 beep.mp3放在 Resources 文件夹Build Action 设为 BundleResource /// /summary public void PlayFromBundle(string resourceName, string extension) { var path NSBundle.MainBundle.PathForResource(resourceName, extension); if (path null) { Console.WriteLine($未找到资源: {resourceName}.{extension}); return; } var url NSUrl.FromFilename(path); Play(url); } private void Play(NSUrl url) { // 如果已有播放器在播放先停止并释放 Stop(); NSError error; _audioPlayer AVAudioPlayer.FromUrl(url, out error); if (error ! null) { Console.WriteLine($AVAudioPlayer 初始化失败: {error.LocalizedDescription}); _audioPlayer null; return; } // 配置播放参数 _audioPlayer.Volume 1.0f; // 音量 0.0 ~ 1.0 _audioPlayer.NumberOfLoops 0; // 0 播放一次-1 无限循环 _audioPlayer.FinishedPlaying OnFinishedPlaying; _audioPlayer.PrepareToPlay(); bool started _audioPlayer.Play(); Console.WriteLine(started ? 开始播放 : 播放失败); } private void OnFinishedPlaying(object sender, AVStatusEventArgs e) { Console.WriteLine(播放完成); Stop(); // 播放结束后释放 } public void Stop() { if (_audioPlayer ! null) { _audioPlayer.FinishedPlaying - OnFinishedPlaying; if (_audioPlayer.Playing) _audioPlayer.Stop(); _audioPlayer.Dispose(); _audioPlayer null; } } } }在VS for Mac里开发C#代码主要在Viewcontroller.cs文件里编写各类控件事件 上面的代码被调用就这样的。Viewcontroller.cs有Viewcontorller.designer.cs的文件这由vs for Mac自己维护它会自动根据xcode控件变化 同步自我更新。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Jev决策系统从概念到生产:架构设计、核心模块与实操避坑指南 2026/9/30 18:36:59

Jev决策系统从概念到生产:架构设计、核心模块与实操避坑指南

1. 从概念到生产:Jev 决策系统到底在解决什么问题第一次听到“Jev”这个词,是在一个做智能调度系统的朋友群里。有人甩出一张架构图,说他们正在把一套叫 Jev 的 AI 决策系统从实验室原型往生产环境推,结果卡在了“决策延迟”和“状…

阅读更多 →
用命令行复刻爆款视频:Hypit 安装、使用与踩坑全记录 2026/9/30 18:36:59

用命令行复刻爆款视频:Hypit 安装、使用与踩坑全记录

上周三晚上,我刷到一个点赞过百万的短视频,内容其实不算复杂:三秒一个镜头切换,文案钩子密集,BGM卡点精准,字幕永远出现在画面下方三分之一的位置。我当时脑子里只有一个想法:这种视频能不能用命…

阅读更多 →
C#实现BACnet设备读写与COV订阅:从对象模型到抓包验证 2026/9/30 18:36:59

C#实现BACnet设备读写与COV订阅:从对象模型到抓包验证

简介:基于C#的BACnet楼宇自动控制示例资源,面向初学BACnet协议或需要快速接入楼宇自控设备的开发者,覆盖设备基本读写、属性值订阅变化两大核心功能。包内共131个文件,体积约2.12MB,典型组成部分包括cs源码工程、xml配…

阅读更多 →
Java学生宿舍管理系统:从数据库设计到并发避坑的完整实战 2026/9/30 18:36:59

Java学生宿舍管理系统:从数据库设计到并发避坑的完整实战

简介:基于Java的学生宿舍管理系统是一套面向高校宿舍管理场景的完整毕业设计源码,采用SpringBootMySQLBootstrap架构,按管理员、宿管、学生三类角色划分权限,覆盖学生、楼宇、宿舍、入住、宿管及管理员管理模块,支持增…

阅读更多 →
实时数字人与隐空间预训练:AI生成范式的两大突破 2026/9/30 18:36:58

实时数字人与隐空间预训练:AI生成范式的两大突破

这周刷论文,最让我意外的不是哪个模型又刷了榜,而是两条看似不搭界的工作:Vidu S2把数字人生成做到了实时720P,NCP-ArchPreview把大语言模型的预训练拉进了隐空间。一个来自视觉生成,一个来自LLM预训练,但本…

阅读更多 →
Agent框架底层重构:模型网关、三层记忆与DAG编排实践 2026/9/30 18:36:52

Agent框架底层重构:模型网关、三层记忆与DAG编排实践

如果你也在做 Agent 开发,大概率经历过这种尴尬:Demo 跑得风生水起,一上真实任务就各种幺蛾子。Orkas 是我这边维护了大半年的一个 Agent 框架,主打多工具编排与长程任务执行。上半年有段时间,线上任务频繁报错&#x…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉