[Mono-dev] Application deployment questions

Robert Jordan robertj at gmx.net
Thu Aug 24 04:50:26 EDT 2006

Lucifer wrote:
> Hi everyone,
> I have read this article though sill not quite understand how to do it.
> http://www.mono-project.com/Guidelines:Application_Deployment
> The normal way to run an application compiled with Mono would be to invoke
> it through the Mono runtime, like this: mono myprogram.exe
> However, I have to deploy my application to end users that are not supposed
> to have Mono runtime/libs installed.
> What's the best practice for deployment?
> I'm planning on packing my application EXE with required DLLs such as
> intl.dll, libglib-2.0-0.dll, mono-1.dll, etc., and the mono.exe.
> Is it a feasible way to do?

All *.dlls from Mono's bin folder are needed, unless you
can prove that your app doesn't touch one of them.

You should build the following hierarchy:

yourapp\etc\mono\  copied from $monoprefix\etc\mono
yourapp\lib\mono\  copied from $monoprefix\lib\mono

> Would it be a better way if I embed Mono runtime(mono.exe) in my
> application?

Not w/out duplicating mkbundle's work.

> http://www.mono-project.com/Embedding_Mono
> In addition, I checked out mkbundle.exe to realize that it is for Linux only
> that is unable to use it for Win32 or MacOSX.

Mkbundle as of Mono 1.1.14 works in Windows.

Under MacOS just some settings are missing. Use the following
shell script:




mkbundle $*

> Second question:
> While Mono.exe startup, it would search '\mono\2.0\' path for 'mscorlib.dll'
> even if I write code such as: mono_set_dirs("", "") to change its search
> path.
> I tried to place 'mscorlib.dll' in the same directory with my application
> EXE but it's not worked and the assembly can't be found.
> How could I do it right?

With mono_set_dirs("", "") you'd need the following directory


The contents of "mono" must be built by copying (recursive) the
contents of the following folders:


It would be much saner from maintainer's point of view
to build this hierarchy:

etc\mono   <- copied from  $monoprefix\etc\mono
lib\mono   <- copied from  $monoprefix\lib\mono

and call mono_set_dirs("lib", "etc");

You should make "lib" and "etc" absolute.


More information about the Mono-devel-list mailing list