Mono和.NET Framework在可用功能方面并不等同。
例如,Mono提供跨平台功能,但没有实现一些由.NET Framework提供的与Windows相关的功能。
因此,您不能在Windows上使用.NET编译,并期望它在Unix / Mono上运行顺畅:
它可能工作,但失败的机会很高。 实际上,程序越复杂,失败的概率就越高(您可能使用了Mono中不可用的内容)。
使用命令行工具Xbuild编译:
如果您想从命令行针对Mono编译.sln / .csproj文件,则xbuild(MSBuild的Mono克隆版)是正确的选择:
xbuild mysolution.sln
xbuild myproject.csproj
在Ubuntu上的xbuild手册页面。
xbuild.exe位于Mono安装中,很可能位于:
C:\Program Files (x86)\Mono\lib\mono\4.5
从IDE (VS)编译
您可以使用MonoHelper插件(在Visual Studio中使用xbuild)在Windows上针对Mono进行编译。
还有另一种解决方案,即从Visual Studio针对“Mono”.NET Framework配置文件进行目标设置。
以下步骤来自 此处。
注意: 我试过在4.5中更改配置文件的位置(但是那不起作用;要么vs找不到它,要么它被检测为未安装),因此始终使用v4.0目录来安装基于v4.0 VM的配置文件。这种限制以及“Profile”已被停止使用的事实使我认为它不适用于更高版本的工具。
同样的配置文件技巧也适用于Unity。
创建两个注册表键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0,Profile=Mono
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0,Profile=Mono
在Microsoft References Assemblies目录中创建指向Mono目录的链接
(您可能需要以管理员身份运行以下命令)
cd "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile"
mklink /d Mono "C:\Program Files (x86)\Mono\lib\mono\4.5"
cd Mono
mkdir RedistList
cd RedistList
notepad FrameworkList.xml
编辑FrameworkList.xml
将以下内容粘贴到FrameworkList.xml
中
<?xml version="1.0" encoding="utf-8"?>
<FileList Redist="Mono-4.5" Name="Mono 4.5 Profile" RuntimeVersion="4.5" ToolsVersion="4.0" > </FileList>
- 在 Visual Studio 项目应用选项卡中更改框架目标
使用 MonoDevelop/Xamarin Studio 进行编译
MonoDevelop 可在 Unix 和 Windows 上运行,并且可以轻松地从 .Net 编译/调试/运行切换到 Mono 编译/调试/运行。然而,尽管 MonoDevelop 对于 C# 季节性开发人员来说相当高效,但它还没有达到与 Visual Studio 和 Resharper 结合的强大之处。