2

有谁知道,或者有文章或分步教程的链接,可以告诉我如何以最低安装量分发 .net MONO 应用程序?Mono 的完整包大约是 75 MB,但我知道其中很多是我不需要的编译器和库。

我只想要最少的运行时文件。

我需要为一个简单的“Hello World”winforms 应用程序分发哪些文件?

我尝试只删除文件,直到我想出一些可行的方法,但它只在安装了 Mono 的机器上有效。这是我尝试过的文件

我为我的应用程序创建了一个目录。在那个目录中,我创建了另外两个目录

\bin \lib\mono\2.0

在 \mono\lib\mono\2.0 我把 mscorlib.dll 文件放在 \bin 目录中我把以下

Accessibility.dll,MyApp.exe (这是我在 VS2005 中做的基本 Hello World),iconv.dll, intl.dll, libglib-2.0-0.dll, libgthread-2.0-0.dll, Microsoft.VisualBasic.dll, mono.dll、mono.exe、Mono.Posix.dll、System.dll、System.Drawing.dll、System.Windows.Forms.dll

然后,我从 \bin 目录运行“mono MyApp.exe”,它在我安装了 Mono 的机器上运行,但在其他机器上没有。

我更喜欢的是“xcopy”解决方案,不需要实际安装,只需要包含运行时文件(比如从拇指驱动器运行时)

请注意,这是在 Windows 计算机上运行,​​而不是在 linux 机器上运行。


我尝试运行 mkbundle2(它是一个 .net 2.0 应用程序)并收到此错误

C:\Program Files\Mono-2.0.1\bin>mkbundle2 C:\Projects\SingleExeTest\bin\Release\SingleExeTest.exe --deps 操作系统为:Windows 源:1 自动依赖:真正嵌入:C:\Projects \SingleExeTest\bin\Release\SingleExeTest.exe 嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\mscorlib.dll 嵌入:C:\PROGRA~1\MONO-2~1.1\lib \mono\2.0\Microsoft.VisualBasic.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\System.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib \mono\2.0\System.Configuration.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\System.Xml.dll
嵌入:C:\PROGRA~1\MONO-2~1.1 \lib\mono\2.0\System.Security.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\Mono.Security.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\System.Windows.Forms.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\System .Drawing.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\System.Data.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0 \Mono.Data.Tds.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\System.Transactions.dll 嵌入:C:\PROGRA~1\MONO-2~1.1\lib \mono\2.0\System.EnterpriseServices.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\Mono.WebBrowser.dll
嵌入:C:\PROGRA~1\MONO-2~1.1 \lib\mono\2.0\Mono.Posix.dll
嵌入:C:\PROGRA~1\MONO-2~1.1\lib\mono\2.0\Accessibility.dll 编译:as -o temp.o temp.s

未处理的异常: System.ComponentModel.Win32Exception: ApplicationName='sh', CommandLine='-c "as -o temp.o temp.s "', CurrentDirectory='' at System.Diagnostics.Process.Start_noshell (System.Diagnostics. ProcessStartInfo startInfo, System.Diagnostics.Process 进程) [0x00000] 在 System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInf o startInfo, System.Diagnostics.Process 进程) [0x00000] 在 System.Diagnostics.Process.Start ( System.Diagnostics.ProcessStartInfo start Info) [0x00000] at MakeBundle.Execute (System.String cmdLine) [0x00000] at MakeBundle.GenerateBundles (System.Collections.ArrayList files) [0x00000] at MakeBundle.Main (System.String[] args ) [0x00000]

C:\Program Files\Mono-2.0.1\bin>

有什么建议么?

4

2 回答 2

3

您需要使用“mkbundle”创建一个可以在 Windows 环境中使用的自包含可执行文件。最终结果是一个可执行文件,其中包含您需要的所有 Mono 库,而没有您不需要的库。

在此网页上查找“捆绑包”标题。它应该让你前进。请注意,这适用于纯 Mono 应用程序;它不处理像 GTK 这样的外部依赖项。

编辑从这里开始

注意:从 mkbundle 手册页...

视窗

在 Windows 系统上,必须安装类 Unix 工具链才能使 mkbundle 工作。您可以使用 cygwin 并安装 gcc、gcc-mingw 和软件包。

请注意,binutils 包中包含 as。

cygwin 可以在这里找到。(我将它安装在我所有的 Windows 机器上并强烈推荐它。)另请注意,cygwin 仅在开发机器上是必需的。它不需要部署到目标。

于 2008-11-25T18:02:43.550 回答
1

嘿,看来我已经成功了!

我必须在 c:\mono 而不是 c:\program files\mono 中安装 Mono

我猜它不喜欢空格

感谢您的所有帮助!

于 2008-11-25T22:07:45.927 回答