1

我想为 System.Web 创建一个存根,并在我的 java 代码中使用 HttpContext,然后就可以使用它了。我尝试了以下方法:

文件夹结构

  • 程序 [文件夹]
    • ikvm-7.0.4335.0 [文件夹]
    • 编译.bat
    • 测试.java
    • IKVM.OpenJDK.Core.dll
    • IKVM.Runtime.dll

java类test.java

import cli.System.Web.HttpContext;

public class test
{  
    public static void main(String args[])
    {
       HttpContext.get_Current().get_Items().get_Item("MyKey");
       System.out.println("Hello World!");
    }
}

编译compile.bat

ikvm-7.0.4335.0\bin\ikvmstub mscorlib
ikvm-7.0.4335.0\bin\ikvmstub System.Web
javac test.java -classpath mscorlib.jar;System.Web.jar
ikvm-7.0.4335.0\bin\ikvmc -target:exe -reference:System.Web.dll test.class
test.exe
pause

如果我运行 compile.bat 它将输出:

警告 IKVMC0100:找不到类“cli.System.Collections.IDictionary”链接错误:方法“cli.System.Web.HttpContext.get_Items()Lcli.System.Collection s.IDictionary;” 有一个返回类型“cli.System.Collections.IDictionary, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”而不是类型“cli.System.Collections.IDictionary(未知程序集)”,正如“test”所期望的那样"

我还尝试直接为“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Web.dll”创建一个存根,但随后出现此错误:

错误:无法加载程序集“C:\Program Files (x86)\Reference Assemblies\Micr osoft\Framework.NETFramework\v4.0\System.Web.dll”,因为它依赖于比当前加载的更高版本的 mscorlib

然后我尝试为“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\mscorlib.dll”创建一个存根并得到:

ikvmstub "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\mscorlib.dll" 警告:程序集 "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework \v4.0\mscorlib.dll" 被忽略,因为先前加载的程序集 "C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll" 具有相同的身份 "mscorlib, Version=2.0.0.0, Culture =中性,PublicKeyToken=b77a5c561934e089"

有没有人试过这个并成功了?

4

1 回答 1

0

我自己找到了答案。我没有引用 mscorlib.dll,因为我认为它是自动引用的。因此,如果我更改以下行,它将起作用:

ikvm-7.0.4335.0\bin\ikvmc -target:exe -reference:System.Web.dll test.class

ikvm-7.0.4335.0\bin\ikvmc -target:exe -reference:mscorlib.dll -reference:System.Web.dll test.class
于 2012-04-25T08:15:05.523 回答