【问题标题】:How to compile a Visual Studio C# Project with Mono如何使用 Mono 编译 Visual Studio C# 项目
【发布时间】: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。我怎么能指向它?

标签: c# visual-studio compiler-construction mono


【解决方案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
    

    【讨论】:

    【解决方案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 也使用了相同的配置文件技巧。

    1. 创建两个注册表项:

      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

    2. 在 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

    3. 编辑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>
    
    1. 在 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#,现在可以使用

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

    在命令行,编译:

    dotnet build <solution/project> 
    

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

    dotnet build
    

    然后

    dotnet run
    

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多