我正在寻找一个小型的Web服务来运行在一个小型的Linux机器上.我更喜欢用C#编写代码,所以我希望使用Mono.
我不想要运行完整的Web服务器或Mono的ASP.NET版本的开销.我正在考虑使用一个处理每个客户端连接的线程的单个进程.线程之间的共享内存而不是数据库.
我已经阅读了微软的HttpListener版本以及它如何与Http.sys驱动程序一起工作.唉,Mono关于这个类的文档只是自动化的类接口,没有讨论它是如何工作的.(Linux没有Http.sys,所以我想它的实现方式大不相同.)
有人能指点我讨论这个模块的一些资源吗?
非常感谢Bill,billpg.com
(对我感兴趣的问题有一点背景.)
前段时间,我问了这个问题,有兴趣与很多来回保持长时间的对话.我已经决定设计我自己的ad-hoc协议,但我采访过的人真的想要一个REST接口,即使代价是"Okay,立即发送命令"信号.
所以,我想知道在Linux/Mono服务器上运行ASP.NET,但偶然发现了HttpListener.这看起来很理想,因为每个"对话"都可以在一个单独的线程中运行.在循环中调用HttpListener的线程可以查找每个进程连接的线程,并将引用传递给该线程.
ASP.NET驱动服务的替代方案是让ASPX代码从数据库中获取状态,并在完成时写回新状态.是的,它会工作,但这是很多开销.
有没有办法在不使用mono的情况下在Linux中获取.Net可执行文件的AssemblyVersion?我想要的是一个脚本或命令,让我在Linux机器上获得AssemblyVersion.我试过了:
#strings file.exe | grep AssemblyVersionRun Code Online (Sandbox Code Playgroud)但它只是字符串而不是数字.还检查:#file file.exeRun Code Online (Sandbox Code Playgroud) 但只有一般信息.
有任何想法吗?
我正在玩Gtk#GUI到Windows.Forms应用程序.我需要一种方法来隔离特定于Mono的代码,Program.cs因为我想避免创建单独的.sln/.csproj.在C/C++/Objective-C项目中,我会做类似于#ifdef __APPLE__或的事情#ifdef _WIN32.
C#似乎有#if命令.
隔离Mono特定代码或Visual Studio特定代码的典型方法是什么?
在这种特殊情况下,我需要为Linux运行.complicated .NET应用程序.复杂的意思是 - 该项目开发了3年,我不想再用java或其他东西编写它,以后开发和支持.NET和Java版本.
应用程序正在生成鼠标和键盘事件(通过winapi/dll导入)并使用串行端口.我也有很少的延迟定时器 - 用于串口通信(10-20ms,我这里不需要大的精度).
其余的只是很多简单的代码,没什么特别的,没有怪异的控件,没有directx等.
我应该期待什么?这会有用吗?
如果代码的某些部分失败 - 我可以稍微更改它,在.net应用程序和linux上的迷你应用程序之间建立网络连接,我可以编写用于发送鼠标和键盘事件或RS232通信.
另外,我想问一下Wine和.NET:
如何编写应该在Linux/Wine/Mono上运行的.NET应用程序?
编辑/移动评论:
几年前我看过单声道,但它太可怕了.现在我看到它长大了,支持LINQ,线程和其他复杂的功能.此外,现在帮助看起来非常严重.我还没有接受回答,因为我看到人们仍然发布非常有用的链接.如果这个问题获得了很多+1,我将重写它,也许这将有助于其他人.
我希望这里有人在linux上有一些.NET实践经验...
我有以下XAML Xamarin.Forms.Button
<Button Text="Cancel" BackgroundColor="#3079a8" TextColor="White" />
Run Code Online (Sandbox Code Playgroud)
我试图通过Padding属性为它添加填充,但这不起作用.在检查了论坛和文档之后,我意识到Xamarin.Forms.Button (链接到文档)的文档中没有填充属性 ,是否还有一些其他类型的快速修复可以为按钮添加更多的填充?一个代码示例将不胜感激.
在Mono 3.12上,我正在使用Socket.SendAsync(SocketAsyncEventArgs)TCP Stream Socket来实现基于请求的流式传输协议.我正在使用SocketAsyncEventArgs.BufferList设置多个数据缓冲区.
在对文件Socket和SocketAsyncEventArgs,我无法找到的是否提及任何SocketAsyncEventArgs.Completed可以在不被时发送的所有字节被提出BufferList时,留下我们必须验证对印象SocketAsyncEventArgs.BytesTransferred.
另一方面,Socket.BeginSend做出保证
当您的应用程序调用时
BeginSend,系统将使用单独的线程来执行指定的回调方法,并将阻塞,EndSend直到Socket发送所请求的字节数或引发异常.
规范对使用SendAsynca 时传输的字节数有什么保证SocketAsyncEventArgs.BufferList?
假设事件已完成SocketError.Success.
问题如下:我的开发工作站上有一个MonoDevelop项目(ASP.NET).
我目前在一个客户站点,没有我的笔记本电脑上的常规开发环境(Regulatory Burden).我有SSH访问我的开发工作站,但网络太滞后,无法舒适地处理X11.
我需要做一个小调整并重新编译.我尝试使用xbuild,没有效果:
qdot@trigati ~/svn/proj/trunk/proj $ xbuild proj.csproj
XBuild Engine Version 2.6.4.0
Mono, Version 2.6.4.0
Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2009.
MSBUILD: error MSBUILD0000: /home/qdot/svn/proj/trunk/proj/proj.csproj: Imported project:
"/usr/lib/mono/xbuild/Microsoft/VisualStudio/v8.0/WebApplications/Microsoft.WebApplication.targets" does not exist.
Run Code Online (Sandbox Code Playgroud)
是否有一些实用程序可以触发monodevelop源代码的重建?显然,代码通过GUI构建.
我有一个.NET 4.0应用程序,它大量使用尾递归(用F#编程).它在.NET VM上运行良好,但在Mono-3.0.1上运行时没有堆栈.
我试过跑步,mono --optimize=tailc但似乎没有改变任何东西.
有没有办法强制单声道消除尾部呼叫?有没有办法增加单声道的最大堆栈大小?
我最近安装了Xamarin Studio,下次我去经营brew医生时,我收到了这个警告:
Warning: /Library/Frameworks/Mono.framework detected
This can be picked up by CMake's build system and likely cause the build to fail. You may need to move this file out of the way to compile CMake.
Run Code Online (Sandbox Code Playgroud)
所以我将Mono.framework移到我的桌面上并修复了问题,但是当我去打开Xamarin Studio时,它说:
Could not launch Xamarin Studio
This application requires the Mono framework.
Please download and install the latest version of Mono.
Run Code Online (Sandbox Code Playgroud)
所以我用Homebrew安装了mono,但Xamarin Studio在打开时仍然有相同的信息.
如何让Xamarin Studio使用Homebrew的Mono版本?
mono ×10
c# ×5
.net ×3
linux ×2
assemblyinfo ×1
homebrew ×1
httplistener ×1
monodevelop ×1
sockets ×1
wine ×1
xamarin ×1
xamarin.ios ×1
xaml ×1
xbuild ×1