【发布时间】:2014-06-06 16:41:18
【问题描述】:
我想做一个简单的例子,java调用在linux上用mono创建的.net程序集。
我在名为 MonoLib 的 ClassLibrary 项目中有一个名为 MyClass 的非常简单的 C# 类
using System;
namespace MonoLib
{
public class MyClass
{
public static void TestDotNet()
{
Console.WriteLine ("Hi I am from .Net");
}
}
}
为了使用类功能,我输入了命令
ikvmstub Desktop/Mono/MonoLib/MonoLib/bin/Debug/MonoLib.dll
正如http://mono-project.com/Java所解释的那样
创建了 MonoLib.jar
然后我想在名为 Demo.js 的纯 java 类中测试 MonoLib.jar
import cli.MonoLib.*;
public class Demo {
public static void main(String[] args) {
MyClass.TestDotNet();
}
}
当我尝试用命令编译它时:
javac -classpath MonoLib.jar Demo.java
我收到此错误:
Demo.java:4: cannot access cli.System.Object
class file for cli.System.Object not found
MyClass.TestDotNet();
^
请告诉我我做错了什么,这是正确的方法。
EDIT1:
从下面的答案我得出结论,问题是我的 java 应用程序没有看到 mscorlib 功能,因此它说“cli.System.Object not found” 这就是为什么我需要扩展这个命令
javac -classpath MonoLib.jar Demo.java
将 mscorlin.jar 添加到类路径。 我可以用一个命令添加多个 jar 吗? 因为我还需要添加 mscorlib.jar。
我尝试将它们添加到一个名为 MonoTest 的文件夹中并运行此命令
javac -classpath /home/user/MonoTest/* Demo.java
结果是
javac:无效标志:/home/user/MonoTest/mscorlib.jar 用法:javac 使用 -help 列出可能的选项
EDIT2
理想情况下,我希望拥有一个桥接类,它可以为 java 提供所有 .net 功能,例如:
import cli.MonoLib.*;
public class Demo {
public static void DotNetViaJava {
MyClass.TestDotNet();
}
}
public class DemoTest {
public static void main(String[] args){
Demo.DotNetViaJava();
}
}
我需要在这个示例 Demo.java 中使用 Java 类,一旦使用 IKVM 编译,就可以在没有 IKVM 的任何 Java 应用程序中使用。
EDIT3
我发现使用 ikvmstub 生成的所有 jar 都只能在 .net 之上的 IKVM 虚拟机上使用。这意味着我所有的java代码都必须在IKVM运行时执行?是这样,有什么限制,我应该改变我的平台来调用.net的几个方法吗?对我来说,这似乎不是互操作性。
【问题讨论】: