在Ubuntu/Debian中安装Mono 3.x

59

我最近阅读到 Mono 3.0 已经发布,其中包括 C# 5 编译器和对 MVC 4 的支持,链接在此处:

http://www.mono-project.com/Release_Notes_Mono_3.0

并且

http://tirania.org/blog/archive/2012/Oct-22.html

无论如何,我都无法弄清楚在Linux或甚至Windows上从哪里获取它作为软件包。

这个页面似乎表明它仍处于Beta测试阶段:

http://www.go-mono.com/mono-downloads/download.html

我曾尝试在Ubuntu 12.10上执行apt-get install mono-complete,但只安装了2.10.8.1版本。我也尝试在Windows机器上安装MonoDevelop 3,但它只提供了MVC 3项目,并且似乎使用了.NET框架。我对Mono完全陌生,我已经尽可能地搜索了所有可能的内容来尝试理解这个工具,但是仍然感到困惑。如果可能的话,我想在Linux上运行它并进行一些尝试。能否有人为我解惑,或者我需要从源代码开始构建?

您可能想要从源代码构建它。 - Basile Starynkevitch
你使用哪个Linux发行版? - Sibi
Ubuntu 12.10。我刚更新了。 - oasten
3.0.1实际上是一个beta版本(在这方面,版本号有些变化)。 - Rolf Bjarne Kvinge
7个回答

107

这是安装Mono 3.0.1的完整指南。

对于不知道如何在Ubuntu 12.04上获取新的Mono 3.0.1版本的初学者(因为我也是一个初学者,在让它工作之前已经花了3天时间)

获取root访问权限以安装和配置Mono 3.0.1

sudo -s
***type your root password***

安装vim编辑器

apt-get install vim

安装apache2

apt-get install apache2

安装编译Mono所需的工具

apt-get install autoconf automake libtool g++ gettext libglib2.0-dev libpng12-dev libfontconfig1-dev
apt-get install mono-gmcs
apt-get install git

安装apache2-threaded-dev(编译mod_mono所需)*

apt-get install apache2-threaded-dev

稍后我们将回到apache2的配置

创建我们需要获取源代码所需的结构

cd /opt
mkdir mono-3.0

在获取源代码之前,先进入那个新文件夹

cd /opt/mono-3.0

从 GitHub 获取源代码

git clone git://github.com/mono/mono.git
git clone git://github.com/mono/xsp.git
git clone git://github.com/mono/libgdiplus.git
git clone git://github.com/mono/mod_mono.git

编译libgdiplus

cd /opt/mono-3.0/libgdiplus
./autogen.sh --prefix=/usr  (the prefix is very important for Ubuntu 12.04)
make
make install

编译 Mono

cd /opt/mono-3.0/mono/
make clean
./autogen.sh --prefix=/usr  (the prefix is very important for Ubuntu 12.04)
make
make install

编译xsp

cd /opt/mono-3.0/xsp
./autogen.sh --prefix=/usr  (the prefix is very important for Ubuntu 12.04)
make
make install

编译 mod_mono

cd /opt/mono-3.0/mod_mono
./autogen.sh --prefix=/usr  (the prefix is very important for Ubuntu 12.04)
make
make install

安装mod_mono后,文件mod_mono.conf被添加到您的apache2文件夹(/etc/apache2)中。

配置apache2

配置apache的默认站点 ###(可选*)**

vim /etc/apache2/sites-available/default
Modify the line "DocumentRoot /var/www" by "DocumentRoot /var/www/YourFolder" (YourFolder is the folder where you publishing your website!)

配置 YourFolder 的权限(可选*)**

cd /var/www/YourFolder
sudo chown -R root:www-data .
sudo chmod -R 774 .
sudo usermod -a -G www-data <yourusername>

在apache2.conf文件中添加mod_mono模块的引用

vim /etc/apache2/apache2.conf
Add "Include /etc/apache2/mod_mono.conf" at the end of the file (without quotes!)

将指针添加到mod_mono.conf中的ASP .NET 4.0

vim /etc/apache2/mod_mono.conf
Add "MonoServerPath /usr/bin/mod-mono-server4" (without quotes!) under the "If Modules condition"

重启apache2服务器 /etc/init.d/apache2 restart


7
哇,如果你花了很多时间编写一个 Stack Overflow 的回答来帮助人们从源代码安装软件,那我猜你更有动力去实际贡献生成 deb/rpm 软件包。后者具有可扩展性。 - knocte
3
Meebey.net仓库只能在安装有Ubuntu 12.04 x64系统的计算机上运行。我安装了x86系统,所以无法使用该仓库。这份指南适用于x86系统。也许它也适用于x64系统,但我没有时间测试 :) - Dominique Goudreault
6
请注意,在新安装系统上,您需要安装make和libx11:apt-get install makeapt-get install libx11-dev - Drewman
3
在构建libgdiplus之前,您可能还希望安装libexif、libjpeg、libgif、libpng和libtiff。您可以使用apt-get install libexif-dev libjpeg-dev libpng-dev libtiff-def命令来安装它们。请注意,这些库的安装可能需要一些时间。 - scotru
1
不起作用。有人看过一个可行的指南吗?我已经很久没有从头开始做这个了。 - Chazt3n
显示剩余10条评论

47

Mono 3.x 对于 Ubuntu 12.10 来说过于前沿。可以通过以下方式从 directhex 的 PPA 中获取预览包(将安装 3.2.1):

sudo add-apt-repository ppa:directhex/monoxide

(如果您使用Ubuntu saucy 13.10,在添加存储库后,您需要编辑文件/etc/apt/sources.list.d/directhex-monoxide-saucy.list并将单词saucy替换为raring

然后,在此之后:

sudo apt-get update && sudo apt-get dist-upgrade

这也会为您获取MonoDevelop 4.x,如果您之前安装了monodevelop。
注意:directhex并不是一个创建PPA的随机人,他是所有基于Mono的软件包的Debian / Ubuntu维护团队的一员。因此使用此方法是升级基础设施的最正式方式。

对于Debian用户而言:mono 3.0.6和MonoDevelop 4.0.x 已经在Debian测试版中可用。因此,我建议您执行以下操作:

  1. 安装Debian测试版(目前名为Debian Jessie)。
  2. 通过sudo apt-get purge mono-runtime卸载mono(在此之后,不要诱惑自己运行sudo apt-get autoremove,否则会破坏系统,这是我在此处报告的错误)。
  3. 修改/etc/apt/sources.list,找到第一行提到main源的位置,并将单词jessie重命名为sid
  4. 运行sudo apt-get update
  5. 通过sudo apt-get install monodevelop安装monodevelop,这将作为依赖项拉取mono。
  6. 恢复步骤3中所做的更改。
  7. 再次执行步骤4。
这样你就会拥有一个比较现代的发行版(与Debian stable相反),再加上非常现代的mono软件包(Mono的最新版本通常相当稳定)。
F#用户:Mono 3.0.6存在一个bug,阻止了该语言在此版本中的工作,请改用Mono 3.2.x。

1
我稍后会尝试一下。不过需要64位的Ubuntu,而我还没有安装。 - oasten
谢谢,这正是我想要的。让我快速上手了。 - oasten
1
看起来这个项目已经不再维护了,因此我认为现在它不是一个有效的答案。不过看起来以前是可以工作的。 - Martin
很有趣,在基于13.04的服务器上安装mod_mono不起作用,我收到了很多错误。我得再试一次。 - Martin
我在最后得到了这个错误:生成monodoc搜索索引... grep: /etc/gre.d/*.conf: 没有那个文件或目录未处理的异常: System.TypeLoadException: 无法从程序集'monodoc,Version=1.0.0.0,Culture=neutral,PublicKeyToken=0738eb9f132ed756'中加载类型'Monodoc.EditMerger'。 [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: 无法从程序集'monodoc,Version=1.0.0.0,Culture=neutral,PublicKeyToken=0738eb9f132ed756'中加载类型'Monodoc.EditMerger'。 root@server:~# 但是"mono -V"显示Mono JIT编译器版本为3.2.1。 - robnardo
显示剩余2条评论

8
我可以帮助您进行翻译。这段内容是关于在Ubuntu Raring上从源代码安装mono 3.x,以下是具体步骤:

1.一次性获取所需依赖项:

sudo apt-get install build-essential autoconf automake \
bison flex gtk-sharp2-gapi boo gdb valac libfontconfig1-dev \
libcairo2-dev libpango1.0-dev libfreetype6-dev libexif-dev \
libtiff4-dev libgif-dev zlib1g-dev libatk1.0-dev libjpeg8-dev \
libjpeg-turbo8-dev libglib2.0-dev libgtk2.0-dev libglade2-dev \
libart-2.0-dev libgnomevfs2-dev libgnome-desktop-dev \
libgnome2-dev libgnomecanvas2-dev libgnomeui-dev libgnomeprint2.2-dev \
libgnomeprintui2.2-dev libpanel-applet-4-dev \
libnautilus-extension-dev librsvg2-dev libgtkhtml3.14-dev \
libgtksourceview2.0-dev libgtksourceview2.0-dev libvte-dev \
libwnck-dev libnspr4-dev libnss3-dev libwebkit-dev libvala-0.18-dev

2:在某个地方创建一个文件夹来存储源代码:

sudo mkdir /opt/mono-3

3:使用git克隆到文件夹中

cd /opt/mono-3
sudo git clone git://github.com/mono/mono.git
cd  mono
sudo git checkout mono-3.0.12

4:构建和安装

sudo ./autogen.sh --prefix=/usr/local
sudo make
sudo make install

就是这样!

要获取System.Drawing.dll和System.Windows.Forms.dll的最新更改,您还需要配置、构建和安装libgdiplus。

 cd libgdiplus
 ./autogen.sh --prefix=/usr/local
 make
 make install

4

apt-get install 安装的是您的发行版所带的Mono版本,似乎是2.10.8.1。 您的发行版可能有更新的Mono软件包,您可能需要在发行版的软件包管理器中选择一些更新的更新通道。 由于您没有说明使用的Linux发行版(以及其中的哪个版本),因此无法回答该问题。

apt-get 表明它是基于Debian / Ubuntu的某些东西,但有许多不同版本。 我是Mac用户,所以我不知道。

请参阅http://www.mono-project.com/Compiling_Mono 以了解如何从源代码编译。

但是,这个问题确实属于超级用户网站(superuser.com),如果您在那里提问,您将获得更好的答案。


我已经更新了问题,说明我正在使用Ubuntu 12.10。这真的是系统管理员类型的问题吗?我首先是一名开发人员。 - oasten
他们好像正在发布2.10.8.1版本。不知道他们是否会很快推出3.0版本的软件包。发行版可能不会立即更新,因为太多依赖项也必须更新。 - Martin Baulig
3
编译Mono源代码并不是太难,您可以构建和安装自己的版本,与发行版提供的版本无关。这样,您也不必担心由于缺少依赖项而破坏某些使用Mono的应用程序。 - Martin Baulig
好的。看起来我明天需要试一下! - oasten

3

2

1
目前在这个截图中只有 Mac 版本。 - Display Name

0

为了完善Dominique Goudreault的优秀解决方案,针对“Denis The Menace在评论中提出的问题,‘Ubuntu 13.04 x86。它说/usr/bin/ld:testgdi.o:对符号'g_print'的引用未定义’”

请按照这个简单的技巧来完成它。

http://www.sgvulcan.com/libgdiplus-2-10-9-build-fails-on-slacware-current64-2012-06/

我无法按照自己的意愿回复评论,所以我不得不在这里发布另一个答案,有更好的做法吗?

更新:哎呀,我没有注意到David V已经指出了解决方案,将所有功劳归给他,我的链接说的是同样的事情,但可能提供了更清晰的路径。:P


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接