如何使用 Mono 编译 Visual Studio C# 项目

Posted

技术标签:

【中文标题】如何使用 Mono 编译 Visual Studio C# 项目【英文标题】:How to compile a Visual Studio C# Project with Mono 【发布时间】:2012-01-06 01:14:15 【问题描述】:

我是新手,不知道从哪里开始。

我想在 Linux 上使用 Mono 编译 Visual Studio C# 项目(通过命令行)。

main.cs 文件包含以下引用:

using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using iTextSharp.text;
using iTextSharp.text.pdf;

我不知道我是否需要注意对编译器的引用,或者它是否会自行提取它们,它是否知道在哪里寻找它们。我以前从来没有这样做过。但我只需要编译这个项目。

谢谢!

【问题讨论】:

有一种方法可以找到:将代码粘贴到 Mono 项目中,然后尝试编译它。编译器抱怨的速度比我们告诉您哪些引用有效,哪些无效的速度更快。 Mono 具有相当全面的 .NET 库覆盖范围,因此它可能开箱即用。 您是否尝试过在 MonoDevelop 中打开 Visual Studio 解决方案? 说真的,我不知道从哪里开始。我什么都不知道,我不知道 MonoDevelop 是什么。我也在尝试在 Linux 上通过命令行编译它。在 Windows 上编译的 Mono 应用程序可以在 Linux 上运行吗?我以为我只能在 Linux for Linux 上编译它。 好的,所以我发现 MonoDevelop 是 Mono 的开发部分。我将尝试在 Windows 上安装它并尝试按照建议的方式编译它。然后看看这个可执行文件是否可以在 Linux 上运行。 找不到 iTextSharp 库...我在项目目录中有 itextsharp.dll。我怎么能指向它? 【参考方案1】:

您可以在 Visual Studio 中构建并在 Linux 上部署并在 mono 下运行。看看这个 article

【讨论】:

关于 iTextSharp 库... Visual Studio 说找不到它,即使 itextsharp.dll 在项目目录中。我怎么能指出它,你可以在上面看到它包含在参考文献中。 我不确定您的问题是什么,请参阅这篇关于向单声道添加 dll 的文章:mono-project.com/DllNotFoundException @Alasdair 具有 using 指令与具有对 dll 的引用不同。 using 指令告诉 compile 在该命名空间中查找类型。引用告诉 MSBuild 通知编译器在编译过程中使用/包含该特定 dll【参考方案2】:

你试过xbuild吗?它是 Mono 世界中的 MSBuild 等价物。 如果 MSBuild 能够在 Windows 中编译您的项目,xbuild 应该能够在 Linux 上执行相同的操作(如果不能,请在 Bugzilla 中提交错误)。

更新:如今,Mono 开发人员/打包人员正在捆绑原始(最近开源的)MSBuild,现在是跨平台的。例如,它已经在 Mac 的最新 Mono 安装程序中可用,因此您可以使用命令行程序 msbuild 来构建您的项目/解决方案(注意:要被 Linux 发行版捆绑还有很长的路要走,因为 msbuild 依赖于nuget 包,也就是二进制 blob)。

【讨论】:

【参考方案3】:

knocte 是对的,安装 mono-complete

apt-get install mono-complete

我不知道为什么,但只安装了 mono-xbuild 时出现错误,

并从命令行运行:

xbuild yourvisualcsharpproject.csproj

【讨论】:

对我来说它显示“没有为此项目设置输出路径”。 你试过这个吗:***.com/questions/9086795/…【参考方案4】:

Mono 和 .NET Framework 在可用功能方面并不相同。

例如,Mono 提供了跨平台的功能,但没有实现 .NET Framework 提供的一些 windows 链接功能。 所以你不能在 Windows 上用 .NET 编译并期望它在 Unix/Mono 上顺利运行: 它可能会起作用,但它很有可能会失败。事实上,程序越复杂,机会就越高(你使用了 Mono 中没有的东西)。

使用命令行工具编译:Xbuild

如果您想从命令行针对单声道编译 .sln/.csproj,那么 xbuild(MSBuild 的单声道克隆)是可行的方法:

xbuild mysolution.sln
xbuild myproject.csproj

The man page of xbuild on Ubuntu.

xbuild.exe 位于单声道安装中,很可能位于:

C:\Program Files (x86)\Mono\lib\mono\4.5

从 IDE (VS) 编译

您可以在 Windows 上使用 MonoHelper 插件从 Visual Studio 中针对 Mono 进行编译(使用下面的 xbuild)。

还有另一种解决方案,它针对 Visual Studio 中的“Mono”.NET Framework 配置文件。 以下步骤来自here。

注意: 我尝试在 4.5 中更改配置文件的位置(但这不起作用;vs 都找不到或者它检测到它没有安装)所以总是使用 v4.0 目录来安装基于 v4.0 VM 的配置文件。这种限制以及“配置文件”已经停止使用的事实让我认为它不适用于更高版本的工具。

顺便说一句,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 Directory 中创建一个指向 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 上运行,您可以在 IDE 中轻松地从 .Net 编译/调试/运行切换到 Mono 编译/调试/运行。然而,虽然 MonoDevelop 对于 C# 季节性开发人员来说非常高效,但它还没有达到 Visual Studio 和 Resharper 的强大功能。

【讨论】:

“这个限制以及“配置文件”这个东西已经停止使用的事实让我认为它不适用于更高版本的工具。你能解释一下为什么它不适用于更高版本的工具吗?如我所见,您可以链接到 Mono 的任何版本(目前是 4.5,但将来会是 4.6 或 4.7),并且引用的程序集将指向 Mono 的程序集。 @CristianM 例如,我不知道它是否仍然适用于 Visual Studio 2017。 Mono 是 .net 框架的克隆,它定义了工具集的规范。由于 Mono/Xamarin 和微软现在合作并发布了 .net core,我没有时间检查该场景是否仍然适用于更高版本,如果您有任何问题,我认为 MS 不会支持它(4.6或 4.7) 好的。谢谢你的回答!【参考方案5】:

Visual Studio 代码和 Mono / .NetCore

如果您想在 Linux 上运行/编译/调试 C#,现在可以使用

Visual Studio Code Mono Debug C# on VS Code

如果你想在 linux 和 windows 上使用完全相同的 api, 你可以使用.Net Core

在命令行,编译:

dotnet build <solution/project> 

或者如果文件夹中只有一个项目

dotnet build

然后

dotnet run

【讨论】:

以上是关于如何使用 Mono 编译 Visual Studio C# 项目的主要内容,如果未能解决你的问题,请参考以下文章

visual studio除了6还有哪个版本用得多而又不占内存?如何实现多visual studi

将 Visual Studio 2012 配置为使用 Mono 的 C# 编译器,而不是默认的 csc.exe

在 Linux 中的 Mono 下,在 Visual Studio / msbuild 中编译的二进制文件是不是 100% 兼容?

如何使用Visual Studio 2017构建Gtk#/ Mono应用程序

Visual Studio和Unity Mono注册了clobbering

在 Visual Studio 2008 上使用 Mono Tools 2 beta 进行调试 - 出现“无法启动 XSP!”错误