【大咖分享】AI 大模型时代,架构师有哪些机遇和挑战? 了解详情
写点什么

把成熟的代码从.NET 移植到 Mono

  • 2011-11-23
  • 本文字数:702 字

    阅读完需:约 2 分钟

现有的应用程序代码代表了一个开发者在时间和金钱上的大量投入。理想情况下,现有代码可以通过某种平台相关的接口结合起来,这种接口提供了一个快速方案,帮助利用原有的资源。但在实践中,这种转换平台的做法并不总是容易的,Patrick Smacchia 最近的文章《Real world feedback on a .Net to Mono migration》就他把现有的.NET 代码移植到Mono 平台上的经历给出了一些有用的想法。

Smacchia 提到他的公司最近把他原先的产品 NDepend (为.NET 平台而写的)移植成一个新的产品 JavaDepend ,这个新的产品运行在 Windows 和 Linux 的 Mono 上面。总的来说,他认为这次的移植非常成功,使用 Mono 平台帮他重用了大约 90% 的现有代码。

值得注意的是,有些工具可以简化平台移植的工作。Mono 的 Migration Analyzer (MoMA)可以用来查找 Mono 尚未支持的与平台相关的代码以及使用了.NET 特性的代码。正如它的主页所说的,Migration Analyzer 可能产生一些错误的结果,也无法捕获所有的潜在问题。但是,Smacchia 对 MoMA 的表现非常满意。MoMA 识别出来的最大问题和 NDepend 所用的第三方 GUI 库有关。为了避免分别维护 Windows 和 Linux 的 GUI 代码,开发者选择了使用包装类,它们可以把自有的 GUI 代码映射到标准的.NET 组件。

Smacchia 对 Mono 的 GDI+ 有着极高的评价,特别强调道“Mono 的 GDI+ 实现非常胜任!太棒了!我必须祝贺 Mono 组…”。最后,有一些 Windows Form 组件(DataGridView/ListView 和 RichTextBox)在 Mono 上表现不够稳定。不过,Mono 项目的开源性质允许开发者针对他们的需要进行特定修改,而不必等待 Mono 的官方发布修正相关问题。

查看英文原文: Migrating Established Code From .Net to Mono

2011-11-23 06:382761

评论

发布
暂无评论
发现更多内容

Jenkins 构建的时候提示 DOCKER_HOST 错误

HoneyMoose

Go 云原生实战:如何增加应用配置模块

宇宙之一粟

云原生 配置 Go 语言 Web应用开发 10月月更

设计模式之美-代码评价标准

GalaxyCreater

设计模式

专访微盟CTO黄骏伟:WOS将为去中心化商业提供一整套数字基建

B Impact

设计模式之美-面向对象、设计原则、设计模式、编程规范、重构的关系

GalaxyCreater

设计模式

StarRocks 技术内幕 | Join 查询优化

StarRocks

数据库

📢利用Vite插件助力证书安装

小鑫同学

前端 插件 11月月更

Vue组件入门(十五)异步组件

Augus

vue3.0 11月月更

2022-11-03:给定一个数组arr,和一个正数k 如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号, 而且可以涂上1~k每一种颜色 如果arr[i] != 0,表示i这里已经确

福大大架构师每日一题

算法 rust 福大大

简述机器学习库

穿过生命散发芬芳

机器学习 11月月更

从2开始,在Go语言后端业务系统中引入缓存

海风极客

Go 设计 后端 11月月更

订单里的充值卡消费和积分抵扣怎么处理?

产品海豚湾

产品经理 产品设计 电商系统 分析设计 11月月更

视图的创建

向阳逐梦

Python 视图 11月月更

Spring Boot「23」DAO 模式

Samson

Java spring Spring Boot 学习笔记 11月月更

使用 Goland 开发 dubbogo 项目时如何自动快速格式化 import 代码块

apache/dubbo-go

华为云从入门到实战 | 云容器服务

TiAmo

华为 华为云 云开发 11月月更

433MHz自发电无线控制器

不脱发的程序猿

物联网 嵌入式 无线通信 ​433MHz自发电无线开关

从1开始,扩展Go语言后端业务系统的RPC功能

海风极客

后端 go语言 11月月更

InnoDB和MyISAM对比

想要飞的猪

小白一键出片,三分钟成为修图大师的秘诀。

淋雨

ps LR 磨皮插件 滤镜插件

一文了解openEuler SIG组角色划分与管理运作

openEuler

开源

史海峰:成为技术领导者 从技术到管理的必经之路丨声网开发者创业讲堂 • 第 5 期

声网

技术管理 人工智能’

【LeetCode】最长递增子序列的个数Java题解

Albert

算法 LeetCode 11月月更

我上了个假“中台”!

雨果

数据中台

互联网安全体制的挑战与机遇

阿泽🧸

互联网安全 11月月更

一次基于Fastjson的JNDI注入

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

从0开始,用Go语言搭建一个简单的后端业务系统

海风极客

后端 go语言 11月月更

以开发之名 | bilibili会员购让IP在眼前动起来

HMS Core

如何快速优雅的用Know Streaming创建Topic

石臻臻的杂货铺

11月月更

详解CAN总线:CAN总线通信优先级机制

不脱发的程序猿

汽车电子 CAN总线 详解CAN总线 CAN总线通信优先级机制 CAN优先级

MySQL能力全开放,OceanBase 社区版 4.0 正式上线

OceanBase 数据库

  • 扫码加入 InfoQ 开发者交流群
把成熟的代码从.NET移植到Mono_.NET_Jeff Martin_InfoQ精选文章