Just a quick tip: If you want to use javac with IKVM that's possible. The only thing to watch out for is that javac requires access to the class files for the core Java classes. IKVM doesn't include these files, but you can generate them by running ikvmstub on IKVM.GNU.Classpath.dll or you can just let javac use the rt.jar of the JDK.
(The following examples assume that the Java SDK is installed in \j2sdk1.4.0)
Here's how you can run javac with ikvm (wrapped for readability):
ikvm -Dsun.boot.class.path=\j2sdk1.4.0\jre\lib\rt.jar
-classpath \j2sdk1.4.0\lib\tools.jar
com.sun.tools.javac.Main
test.java
Here's how you can compile javac into a .NET executable:
ikvmc -out:javac.exe
-main:com.sun.tools.javac.Main
-Dsun.boot.class.path=\j2sdk1.4.0\jre\lib\rt.jar
\j2sdk1.4.0\lib\tools.jar
Note that this hardcodes the path to rt.jar into the javac.exe file, so this executable can only be used on the system it was created on. Note also that you cannot redistribute the javac executable because this would violate the Sun license.