Difference between revisions of "Install and use Monodevelop"

From LSDevLinux
Jump to: navigation, search
(> to ▸)
m (Categorize)
Line 198: Line 198:
Rebuild the shared library cache:  
Rebuild the shared library cache:  
   sudo ldconfig
   sudo ldconfig
[[Category:Linux tools]]

Revision as of 23:10, 11 June 2010

Instructions to install and use Monodevelop (http://monodevelop.com/) to edit FieldWorks code.


Ubuntu 9.10 Karmic and later


Build and install monodevelop and its dependencies into /opt/monodevelop-new:

~$ git clone git://git.lsdev.sil.org/fieldworks-build.git
~$ cd fieldworks-build
fieldworks-build$ export http_proxy=http://proxy.example.com:1234 # Optionally set proxy to help wget
fieldworks-build$ sudo aptitude update
fieldworks-build$ ./build-monodevelop

To uninstall monodevelop-new in the future:

$ sudo rm -rf /opt/monodevelop-new
$ sudo rm /usr/bin/monodevelop-new


Configure monodevelop to use the FieldWorks mono for building, running, and debugging FieldWorks:

  1. Install wrapper script:
    fieldworks-build$ sudo cp /usr/local/bin/mono{,-real}
    fieldworks-build$ sudo cp mono-fw /usr/local/bin/mono
    fieldworks-build$ sudo chmod +x /usr/local/bin/mono
  2. Run monodevelop-new:
    $ monodevelop-new
  3. Choose EditPreferences.
  4. Under Preferences, click .NET Runtimes. Click Add.
  5. Browse to /usr/local and click Select Folder. Select the new Mono that you added to the list, which names the folder you selected such as "Mono 2.7 (/usr/local)", and click Set as Default. Click OK.
  6. Choose FileQuit.
  7. Run monodevelop-new this way:
    $ export FIELDWORKS_ENVIRON="/home/path/to/Calgary/WW/environ"
    $ monodevelop-new

To uninstall wrapper script in the future:

$ sudo mv /usr/local/bin/mono{-real,}

Enable use from GUI

To run monodevelop-new without using the command-line, do the following:

  1. Right-click the Gnome panel and choose Add to Panel...
  2. Click Custom Application Launcher. Click Add.
  3. In the Name box, type monodevelop-new
  4. In the Command box, modify as appropriate for your system and paste in all as one line:
    bash -c 'export FIELDWORKS_ENVIRON="/home/REPLACE/WITH/YOUR/PATH/TO/Calgary/WW/environ"; monodevelop-new'
  5. Click the icon on the left in the Create Launcher dialog.
  6. In the Browse icons dialog, paste into the text box at the top:
  7. Click OK. Click OK.

Use Monodevelop with FieldWorks

Editing code

There is not a global solution file. To edit code in a project:

  • Check Out the project's directory from p4v.
  • Open the csproj project file in monodevelop.

If you only have anonymous access to the Perforce repository and cannot Check Out files, you could manually chmod u+w the files you want to edit, or use git-p4.

Integrating with VCS

Monodevelop does not currently automatically check out files from Perforce before attempting to edit them. And it is unable to edit checked out files since they are read-only. Use p4v to check out a project and its files before attempting to edit them.

While Monodevelop 2.2.1 successfully uses and edits .csproj files, it seems to delete a few things as well that Visual Studio may find useful. When committing .csproj files with meaningful changes, consider not committing unnecessary <Reference> reordering or the deletions of sections such as:

-    <ApplicationIcon>
-    </ApplicationIcon>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>

-    <StartupObject>
-    </StartupObject>

-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>

-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>

-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>

-    <DebugSymbols>false</DebugSymbols>


Building projects works from within monodevelop.

You can also build from terminal using nant (see Build_FieldWorks#Subsequent_builds_should_be_built_by_doing:).

If building in monodevelop says something like

Build failed. Access to the path ".../Calgary/WW/Lib/debug/ECInterfaces.dll" or ".../Calgary/WW/Output/Debug/ECInterfaces.dll" is denied.

then do

Output/Debug$ chmod u+w *

and build again.


Debugging C# and C++ code works in monodevelop. Sometimes when you debug a GUI program and reach a breakpoint, monodevelop might freeze. To avoid this, you can have the program run inside a Xephyr window. To do this, start Xephyr:

$ Xephyr :2 -screen 1024x768 &
$ DISPLAY=:2 metacity &

And in monodevelop, right-click the startup project, and click Options. Under Run, click General. In the Environment Variables section, add a Variable "DISPLAY" and a Value ":2". Now when you Run or Debug this project, it will display the program in your Xephyr window. Remember not to check in this setting of DISPLAY in the csproj.

Currently (20100412), the debugger in MonoDevelop 2.2.1 does not work with the latest mono in mono-calgary.git (commit 0fc6db6), and gives an error:

Unhandled error launching soft debugger
Mono.Debugger.Soft.VMDisconnectedException: Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown.

To reset your mono-calgary.git back to a mono version that is compatible with the debugger in MonoDevelop 2.2.1, do (note that this will delete any changes you have made in mono-calgary):

mono-calgary$ git reset --hard d7222b2b8e58b6488e21ca2bd65fd6e1e4b8f126
mono-calgary$ ./checkout-and-build-mono

When debugging, if Monodevelop freezes, you may be able to get it back. Go to the terminal from which you started Monodevelop. It may say something like

[6]+  Stopped                 monodevelop

If so, try running:

$ fg

Unit tests

Unit tests ran be run and debugged using monodevelop. To show the unit tests of your open projects, choose View > Unit Tests.

You can also run unit tests from terminal using nant and nunit (see Build_FieldWorks#Unit_tests).

When running unit tests in monodevelop, if you get the internal error:

FileNotFoundException: Could not load file or assembly 'nunit.core.interfaces ...' or one of its dependencies.

then for now do

Output/Debug$ rm nunit.core.dll

and try again.

If you get the error:

System.TypeLoadException: Could not load type 'NUnit.Core.TestCaseResult' from assembly 'nunit.core.interfaces, ...


Output/Debug$ rm nunit.core.interfaces.dll

Running and debugging FieldWorks in Monodevelop

To run or debug TE or Flex from Monodevelop:

  • In the Solution pane, right-click the solution and choose Add ▸ Add Existing Project. Navigate to and open Src/Common/FieldWorks/FieldWorks.csproj
  • Right-click the FieldWorks project and choose Options. Under Run click General. In the Parameters box, type "-proj .../Sena\ 2.xml -app Flex", where ".../Sena\ 2.xml" is a path to Sena 2.xml. Optionally substitute Flex with TE.
  • In the Environment Variables area, add a Variable "DISPLAY" with Value ":2". Click OK.
  • Right-click the FieldWorks project and choose Set As Startup Project.

Now if you Run or Debug, monodevelop will run or debug FieldWorks inside your :2 Xephyr window.

Old installation method

This is the old installation method, which used the same mono to run monodevelop and FieldWorks.

Ubuntu 10.04 Lucid

Lucid instructions are still in progress.

$ sudo aptitude install monodevelop monodevelop-debugger-gdb monodevelop-debugger-mdb \
  monodevelop-nunit monodevelop-python

Since you will be using a mono installed in /usr/local, follow the Ubuntu 9.10 instructions to register assemblies in the /usr/local GAC, and also do:

$ for assembly in \
  /usr/lib/cli/glade-sharp-2.0/glade-sharp.dll \
  do sudo gacutil2 -gacdir /usr/local -i $assembly; done

Build and install gtk-sharp:

$ mkdir ~/monodevelop-2.2 && cd ~/monodevelop-2.2 &&
  wget http://ftp.novell.com/pub/mono/sources/gtk-sharp212/gtk-sharp-2.12.10.tar.bz2 &&
  tar xf gtk-sharp-2.12.10.tar.bz2 &&
  (cd gtk-sharp-2.12.10 && ./configure --prefix=/usr/local && make && sudo make install && sudo ldconfig)

Ubuntu 9.10 Karmic

Ubuntu 9.10 Karmic only has monodevelop 2.0, while Ubuntu 10.04 Lucid has monodevelop 2.2.1. To install Monodevelop 2.2 into Ubuntu 9.10 from source, follow these steps.



$ sudo aptitude install libncurses5-dev

Register some /usr/lib/mono assemblies into the /usr/local/lib/mono GAC:

$ for assembly in \
  /usr/lib/mono/gac/Mono.Addins.Setup/ \
  /usr/lib/mono/gac/Mono.Addins/ \
  /usr/lib/cli/gnome-sharp-2.24/gnome-sharp.dll \
  /usr/lib/mono/gtk-sharp-2.0/glade-sharp.dll \
  /usr/lib/cli/gnome-vfs-sharp-2.0/gnome-vfs-sharp.dll \
  do sudo gacutil2 -i $assembly; done

Download a bunch of monodevelop tar files:

$ mkdir monodevelop-2.2
$ cd monodevelop-2.2
monodevelop-2.2$ wget http://ftp.novell.com/pub/mono/sources/monodevelop/monodevelop-2.2.1.tar.bz2 \
     http://ftp.novell.com/pub/mono/sources/monodevelop-debugger-mdb/monodevelop-debugger-mdb-2.2.1.tar.bz2 \
     http://ftp.novell.com/pub/mono/sources/monodevelop-debugger-gdb/monodevelop-debugger-gdb-2.2.1.tar.bz2 \
     http://ftp.novell.com/pub/mono/sources/monodevelop-python/monodevelop-python-2.2.tar.bz2 \

Extract them all:

monodevelop-2.2$ for f in *.bz2; do tar xf $f; done

Build and install them all:

monodevelop-2.2$ for dir in \
  gtk-sharp-2.12.10 \
  monodevelop-2.2.1 \
  monodevelop-debugger-gdb-2.2.1 \
  monodevelop-debugger-mdb-2.2.1 \
  do (cd $dir && ./configure --prefix=/usr/local && make && sudo make install); done

Rebuild the shared library cache:

  sudo ldconfig