Difference between revisions of "Install and use Monodevelop"
(→Building: git fw) |
(→Configure: use xbuild) |
||
Line 29: | Line 29: | ||
# Choose '''Edit > Preferences'''. | # Choose '''Edit > Preferences'''. | ||
# Under '''Preferences''', click '''.NET Runtimes'''. | # Under '''Preferences''', click '''.NET Runtimes'''. | ||
− | # Click '''Mono 2.10.4 (/usr/local)''' and click '''Set as Default'''. Click '''OK'''. | + | # Click '''Mono 2.10.4 (/usr/local)''' and click '''Set as Default'''. |
+ | # Under '''Preferences''' click '''Build'''. | ||
+ | # Select '''Compile projects using MSBuild / XBuild'''. | ||
+ | # Click '''OK'''. | ||
===Ubuntu 10.04 Lucid=== | ===Ubuntu 10.04 Lucid=== |
Revision as of 12:37, 9 November 2012
Instructions to install and use Monodevelop (http://monodevelop.com/) to edit FieldWorks code.
Install
Ubuntu 12.04 Precise
Install the following packages: monodevelop monodevelop-debugger-gdb monodevelop-nunit monodevelop-python monodevelop-versioncontrol
. You will need to enable Universe in your software sources (eg via Settings ‣ Repositories in Synaptic).
Monodevelop will use mono in /usr/local
by default and not work. Work around this by doing the following:
- Do one of the following:
- In Unity, right-click the desktop and choose Create Launcher...
- In classic Gnome, hold Alt or Alt and Super, right-click the Gnome panel and choose Add to Panel.... Click Custom Application Launcher. Click Add.
- In the Create Launcher dialog, in the Name box type
Monodevelop FW
- In the Command box, paste in all as one line:
bash -c 'PATH=/usr/bin:$PATH; export FIELDWORKS_ENVIRON="$HOME/fwrepo/fw/environ"; monodevelop'
- Click the icon on the left in the Create Launcher dialog.
- If not already depressed, click the pencil icon to reveal the Location box. In the Location box paste
/usr/share/icons/hicolor/scalable/apps/monodevelop.svg
and click Open. - Click OK.
Wrapper script
Install wrapper script so running and debugging FieldWorks in monodevelop uses the FieldWorks environment:
$ cd && [ ! -d fieldworks-build ] && git clone git://git.lsdev.sil.org/fieldworks-build.git $ cd ~/fieldworks-build fieldworks-build$ [ ! -e /usr/local/bin/mono-real ] && (sudo cp /usr/local/bin/mono{,-real} && sudo cp "mono-fw" /usr/local/bin/mono)
Configure
Configure monodevelop:
- Launch monodevelop using the custom icon.
- Choose Edit > Preferences.
- Under Preferences, click .NET Runtimes.
- Click Mono 2.10.4 (/usr/local) and click Set as Default.
- Under Preferences click Build.
- Select Compile projects using MSBuild / XBuild.
- Click OK.
Ubuntu 10.04 Lucid
Upgrade
To upgrade an existing monodevelop-new to a newer version:
- Remove old monodevelop-new:
$ sudo rm /opt/monodevelop-new -rf
- Update and run build-monodevelop script:
$ cd ~/fieldworks-build fieldworks-build$ git pull 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
Install
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 /opt/monodevelop-new -rf $ sudo rm /usr/bin/monodevelop-new
Configure
Configure monodevelop to use the FieldWorks mono for building, running, and debugging FieldWorks:
- Install wrapper script:
- fieldworks-build$ sudo cp /usr/local/bin/mono{,-real}
- fieldworks-build$ sudo cp mono-fw /usr/local/bin/mono
- Run monodevelop-new:
- $ monodevelop-new
- Choose Edit ▸ Preferences.
- Under Preferences, click .NET Runtimes. Click Add.
- Browse to /usr/local and click Select Folder (or Open). Select the new Mono that you added to the list, which names the folder you selected such as "Mono 2.10.4 (/usr/local)", and click Set as Default. Click OK.
- Choose File ▸ Quit.
- 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:
- Right-click the Gnome panel and choose Add to Panel...
- Click Custom Application Launcher. Click Add.
- In the Name box, type
monodevelop-new
- 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'
- Click the icon on the left in the Create Launcher dialog.
- In the Choose an icon dialog, navigate to and select /opt/monodevelop-new/monodevelop/share/icons/hicolor/scalable/apps/monodevelop.svg. Click Open.
- Click OK.
Troubleshooting
Specified Default Runtime not being used
If running Ubuntu 10.10 Maverick and MonoDevelop 2.8, and running FieldWorks from terminal works but running from MonoDevelop shows a FieldWorks yellow crash dialog box with a message "Msg: Method not found: 'System.Windows.Forms.Control.IgnoreUpdates'", it may be that MonoDevelop (running using a mono in /opt/mono) is using the Mono GAC in /opt/mono rather than the Mono GAC and libraries in /usr/local/mono, even if /usr/local/mono is selected as the Default Runtime.
Seen in the Application Autput window in monodevelop: Loaded assembly: /opt/mono-2.10/lib/mono/gac/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
Set MONO_GAC_PREFIX to /usr/local/lib/mono in the Solution/Options/Run/General Environment Variables. This appears to fix the problem.
Use Monodevelop with FieldWorks
Editing code
There is not a global solution file. To edit code in a project, open the csproj project file in monodevelop.
Integrating with VCS
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>
If monodevelop makes undesired modifications to all of your open csproj files, you can revert all .csproj file changes by running a command such as
fwrepo/fw/Src$ find -name \*csproj -print0 | xargs -0 git checkout
Building
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 ".../fwrepo/fw/Lib/debug/ECInterfaces.dll" or ".../fwrepo/fw/Output/Debug/ECInterfaces.dll" is denied.
then do
Output/Debug$ chmod u+w *
and build again.
Debugging
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) (Note that this is probably not necessary with the current 20101008 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.
or
TypeLoadException: Could not load type 'NUnit.Core.NTrace' from assembly 'nunit.util'.
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, ...
do
Output/Debug$ rm nunit.core.interfaces.dll
If you get the error:
ConfigurationErrorsException: Type 'System.Configuration.NameValueSectionHandler' not found.
in, say, FwCoreDlgsTests
, then edit the corresponding foo.dll.config
in Output/Debug
, such as Output/Debug/FwCoreDlgsTests.dll.config
and change:
<section name="TestRunner" type="System.Configuration.NameValueSectionHandler"/>
to
<section name="TestRunner" type="System.Configuration.NameValueSectionHandler, System"/>
This can be done to all of the unit test dll.config files at once by doing:
Output/Debug$ for config in *Tests.dll.config; do sed -i $config -e \ 's@"System.Configuration.NameValueSectionHandler"@"System.Configuration.NameValueSectionHandler, System"@' done
If running unit tests that derive from BaseTest produce a error such as
- TestFixutreSetUp failed in FwFontDialogTests
then you may not have your default .NET runtime environment set properly. Refer to Install_and_use_Monodevelop#Configure for instructions. You may have recently rebuilt and reinstalled mono from mono-calgary.git; if so then you will need to setup the mono + mono-real wrapper script again.
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 toSena 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.
Debug a library
Unlike Visual Studio the project properties in Monodevelop don't have a Debug tab that would allow to specify an external program to start.
However, this can be done in the project properties, General/Custom Commands section. Add a project operation for "Execute" and select the executable there.
Note that you might have to specify the full path to the executable - at least on my machine a relative path didn't work when I tried to run NUnit as executable.
Debugging into Mono code
If you want to debug into mono code, you have to disable the debugging of project code only: in Monodevelop, go to Edit/Preferences, Debugger/General section and unselect "Debug project code only".
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 \ /usr/lib/cli/Mono.Addins.Gui-0.2/Mono.Addins.Gui.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.
Reference:
- http://monodevelop.com/Download
- http://monodevelop.com/Developers/Building_MonoDevelop#Building_from_Tarballs
Dependencies:
$ 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/0.4.0.0__0738eb9f132ed756/Mono.Addins.Setup.dll \ /usr/lib/mono/gac/Mono.Addins/0.4.0.0__0738eb9f132ed756/Mono.Addins.dll \ /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 \ /usr/lib/cli/gconf-sharp-2.0/gconf-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 \ http://ftp.novell.com/pub/mono/sources/gtk-sharp212/gtk-sharp-2.12.10.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 \ monodevelop-python-2.2 do (cd $dir && ./configure --prefix=/usr/local && make && sudo make install); done
Rebuild the shared library cache:
sudo ldconfig