如何在Linux下运行C#软件

pink-zhu 2015-12-22 10:11:26
最近要修复一个由c#编写的程序,对方需要让这个程序在Linux系统下运行,找了好多方法,主流的就是安装虚拟机;目前试过安装wine,Mona,都不可行。请大神们指导一下,应该如何实现这项功能。
...全文
1652 36 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
amouslion 2019-05-23
  • 打赏
  • 举报
回复
.net core可以运行在linux,windows,macos操作系统上
weixin_39186306 2019-05-22
  • 打赏
  • 举报
回复
你好,我使用C#编写了一个Socket服务器放到Linux上,使用工具能正常使用,使用 & 放到后台后客户端连接就会卡死请问这个该怎么解决呢?

try
{
Console.WriteLine("尝试监听");
if (server == null)
{
Console.WriteLine("没有服务器,需要重新创建");
StartServer();//如果服务器为空,重新创建
}
Console.WriteLine("要保存了");
Socket conClient = server.Accept();
Console.WriteLine("有客户端链接,保存");
Receive_Identification(conClient);//接收客户端的标记并为客户端开启接收信息线程
}

输出日志:
nohup: ignoring input
启动服务器成功。。。
执行接收线程
开始监听
尝试监听
要保存了

Unhandled Exception:
System.UnauthorizedAccessException: Access to the path "/output/[Unknown]" is denied.
at System.IO.FileStream.ReadData (System.Runtime.InteropServices.SafeHandle safeHandle, System.Byte[] buf, Int32 offset, Int32 count) <0x41802960 + 0x000a3> in <filename unknown>:0
at System.IO.FileStream.ReadInterna
在飞的特拉斯 2015-12-28
  • 打赏
  • 举报
回复
代码量不大的话可以考虑重新写
hz890 2015-12-28
  • 打赏
  • 举报
回复
对.NET的所谓跨平台,个人已经非常失望(正在考虑向Java方向靠拢)。
hz890 2015-12-28
  • 打赏
  • 举报
回复
微软官方所谓的.NET开源和跨平台,主要是针对服务器端的应用而言的(即便是服务器端的ASP.NET 5目前也不过是测试版本,还未正式发布)。 至于.NET的桌面应用跨平台,目前无需期待,因为官方根本就没有相应的计划,可能以后也不会有! 不妨对客户说No!
nomasp 2015-12-25
  • 打赏
  • 举报
回复
引用 26 楼 lpch1987 的回复:
1.用dev控件,那就是有界面的,直接在linux上跑基本上不可能 2.100多M,应该绝大部分都是界面,业务逻辑应该不会超过5M,即使用QT重写,开发调试测试时间 非常大,慎重 3.如果非要这样做,虚拟机是主流;mono的话你需要重新编译所有第三方库以及你自己的代码,还要测试,基本不可取;再加一台工控机安装windows也是可以的 最后,你们应该直接说做不到,虽然顾客是上帝,但是做不到就是做不到,没完整测试的东西 不要拿给客户,后期出了问题会非常麻烦
虽然顾客是上帝,但是做不到就是做不到,没完整测试的东西 不要拿给客户,后期出了问题会非常麻烦[/color][/quote] 有道理……
richer 2015-12-25
  • 打赏
  • 举报
回复
建议是说为客户负责,这样提供的东西没有质量保证,移植可靠性差。
bigbaldy 2015-12-25
  • 打赏
  • 举报
回复
引用 10 楼 baidu_28217989 的回复:
[quote=引用 8 楼 johnliuyuan 的回复:] 用mono吧,不过可能有部分函数和功能不支持
这个软件只要运用的就是GDI+的绘图功能,是一个线路绘制和监控软件,是否支持?[/quote] 纯GDI+是绝对可以的,不过在linux下搞图形界面的东西还是不太靠谱,除了图形界面,其他的东西mono对linux的支持已经非常完善了,下载源码http://download.mono-project.com/sources/mono/mono-4.2.2.10.tar.bz2,然后 tar -xjvf mono-X.XX.tar.bz2; cd mono-X.XX ./configure --prefix=/usr/local; make; make install 肯定可以装上并完美使用,自从.net开源后,mono早就不是人们眼中原来的mono了
bigbaldy 2015-12-25
  • 打赏
  • 举报
回复
还有补充一句,为何非要在linux下做图形界面程序?都用linux了,难道还得用界面,不知这是什么需求?如果用户非要在linux下用图形界面的东西,那么目前只有Qt可以胜任
bigbaldy 2015-12-25
  • 打赏
  • 举报
回复
由于今年微软的开源,mono已全面采用微软的代码了,支持的非常好了,但界面的东西是不行的,因为dev控件用了很多native函数
_贺兰 2015-12-24
  • 打赏
  • 举报
回复
1.用dev控件,那就是有界面的,直接在linux上跑基本上不可能 2.100多M,应该绝大部分都是界面,业务逻辑应该不会超过5M,即使用QT重写,开发调试测试时间 非常大,慎重 3.如果非要这样做,虚拟机是主流;mono的话你需要重新编译所有第三方库以及你自己的代码,还要测试,基本不可取;再加一台工控机安装windows也是可以的 最后,你们应该直接说做不到,虽然顾客是上帝,但是做不到就是做不到,没完整测试的东西 不要拿给客户,后期出了问题会非常麻烦
健者天行 2015-12-24
  • 打赏
  • 举报
回复
巨坑,不现实。
pink-zhu 2015-12-24
  • 打赏
  • 举报
回复
引用 13 楼 crystal_lz 的回复:
[quote=引用 12 楼 baidu_28217989 的回复:] [quote=引用 6 楼 crystal_lz 的回复:] mono 我一直用 装一个 monodevelop IDE 环境 直接写代码
这个程序是c#的,已经写好,功能很多,很大。对方要求实现让该程序在Linux下运行,而不是重新编程。有一个下下策,就是重新用qt编写,但是程序太大了,有一百多兆,如果要改成qt的话,工作量很大。装了mono,不过有些功能无法显示。装monodevelop有用吗?[/quote] 如果你程序 本身没有手动去调用外界裤 比如Win32API 而是都是用的 .net 自己封装的东西的话 那直接wine就可以运行 如果你要换成qt那就是你整个程序重写了 而且 在linux下你也得重新编译 而不是 一个可执行文件搞定 qt虽然跨平台 但是和java的方式有点不一样 java是一个虚拟机 一个文件可以到处用 qt并没有虚拟机他只是一个ui裤 每个平台下都是单独的一个裤 它裤里面的函数再去调用对应平台的函数 帮你做中转而已[/quote] 昨天写了一个简单的绘图程序,只有两个按钮,一个点击绘制矩形和文本,另一个清除,但是用mono运行后,矩形绘制延时,要第二次点击时才会出现;如果用循环绘制上百条直线,用mono只能显示极小的一部分。请问这个是我mono的使用方法不对吗?
pink-zhu 2015-12-24
  • 打赏
  • 举报
回复
引用 13 楼 crystal_lz 的回复:
[quote=引用 12 楼 baidu_28217989 的回复:] [quote=引用 6 楼 crystal_lz 的回复:] mono 我一直用 装一个 monodevelop IDE 环境 直接写代码
这个程序是c#的,已经写好,功能很多,很大。对方要求实现让该程序在Linux下运行,而不是重新编程。有一个下下策,就是重新用qt编写,但是程序太大了,有一百多兆,如果要改成qt的话,工作量很大。装了mono,不过有些功能无法显示。装monodevelop有用吗?[/quote] 如果你程序 本身没有手动去调用外界裤 比如Win32API 而是都是用的 .net 自己封装的东西的话 那直接wine就可以运行 如果你要换成qt那就是你整个程序重写了 而且 在linux下你也得重新编译 而不是 一个可执行文件搞定 qt虽然跨平台 但是和java的方式有点不一样 java是一个虚拟机 一个文件可以到处用 qt并没有虚拟机他只是一个ui裤 每个平台下都是单独的一个裤 它裤里面的函数再去调用对应平台的函数 帮你做中转而已[/quote] 昨天写了一个简单的绘图程序,只有两个按钮,一个点击绘制矩形和文本,另一个清除,但是用mono运行后,矩形绘制延时,要第二次点击时才会出现;如果用循环绘制上百条直线,用mono只能显示极小的一部分。请问这个是我mono的使用方法不对吗?
qldsrx 2015-12-24
  • 打赏
  • 举报
回复
mono对winform的支持非常糟糕,而且肯定是不支持DEV控件,这个我亲自测试过。选择linux只因为它简洁,命令行下就一个init进程和ssh守护进程,其余一律都可以不要。但是你把桌面进程给启动了就不简洁了,拼桌面性能,除了windows就是IOS了,linux根本不能考虑的。
Anymore 2015-12-24
  • 打赏
  • 举报
回复
配置一台高于对方性能要求的服务器,然后装linux 加虚拟机的windows,当然显卡如果要求高那得先测试一下能否达到要求。
小灰狼 2015-12-24
  • 打赏
  • 举报
回复
引用 19 楼 baidu_28217989 的回复:
[quote=引用 17 楼 hemowolf 的回复:] 客户和你们是什么性质的合作,是你们为客户定制开发软件,还是在你们现有软件产品的基础之上进行功能扩充? 如果是前者,连软件运行平台在开发前期都不进行确认,就是你们自己的问题 如果是后者,或者整个软件产品根本就是别家公司开发的,直接回复他们不可行 另外,楼主应该思路一下你的客户为什么会有这样的要求,如果他们的理由不够充分,你再强调这样做的风险、代价,你们可以尝试说服客户放弃这个要求
是一个现有软件的基础上进行功能扩充,因为那边的实时监控系统是Linux的,要在那个上面运行。看来并不可行啊。[/quote] 那你就直接回复客户,不可行 虽然 Mono 称为在 Linux 上的 dot net framework,但是你们的产品并没有在它上面测试过,不敢保证 再想想其它办法,应该有其它方案的,不要在这个问题上走进死胡同
HTControl 2015-12-24
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/391835060 我感觉这就是个奇葩, 为啥把C#微软这玩意 拿linux上去? 做界面吗? 有QT 其它方面linux系统上用得着吗 不多说 ,容易挨喷
pink-zhu 2015-12-24
  • 打赏
  • 举报
回复
引用 18 楼 sbwwkmyd 的回复:
如果与外围没有关系,最简单的办法在Linux上就是装个windows的虚拟机
这样会降低性能吗?装了虚拟机之后安装windows系统再运行程序会很卡的,对方还要求性能不能降低,感觉好坑啊。
pink-zhu 2015-12-24
  • 打赏
  • 举报
回复
引用 17 楼 hemowolf 的回复:
客户和你们是什么性质的合作,是你们为客户定制开发软件,还是在你们现有软件产品的基础之上进行功能扩充? 如果是前者,连软件运行平台在开发前期都不进行确认,就是你们自己的问题 如果是后者,或者整个软件产品根本就是别家公司开发的,直接回复他们不可行 另外,楼主应该思路一下你的客户为什么会有这样的要求,如果他们的理由不够充分,你再强调这样做的风险、代价,你们可以尝试说服客户放弃这个要求
是一个现有软件的基础上进行功能扩充,因为那边的实时监控系统是Linux的,要在那个上面运行。看来并不可行啊。
加载更多回复(16)

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧