如何让 IKVM 编译器应用程序集属性

How do I make IKVM compiler apply assembly attributes

我正在尝试使用 ikvmc 从 .jar 创建 .NET DLL,我希望它具有特定的程序集属性。 ikvmc 有一个 -assemblyattributes 选项,我正在使用它,但程序集属性没有出现在程序集中。

这是我正在做的。

我有一个 Hello.java 文件:

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world");
    }
}

我是这样编译的:javac Hello.java

我把它变成一个罐子:jar cvf hello.jar Hello.class

我生成了核心库存根 jar:ikvmstub mscorlib

我有一个 AssemblyInfo.java 文件:

@cli.System.Reflection.AssemblyTitleAttribute.Annotation("My Assembly Title")
@cli.System.Reflection.AssemblyProductAttribute.Annotation("My Assembly Product")
@cli.System.Reflection.AssemblyCompanyAttribute.Annotation("My Assembly Company")
@cli.System.Security.AllowPartiallyTrustedCallersAttribute.Annotation
interface AssemblyInfo {}

我这样编译:javac -cp mscorlib.jar AssemblyInfo.java

然后我 运行 ikvmc 生成我的 DLL:ikvmc -target:library -assemblyattributes:AssemblyInfo.class hello.jar

这生成了 hello.dll,然后我使用 ildasm 检查并发现指定的属性不存在。

IKVM 版本为 8.0.5449.1。

谁能帮我找出我做错了什么?

好吧,由于没有人站出来回答这个问题,我下载了 IKVM 源代码并带着调试器去了镇上。

事实证明,IKVM 会安静地忽略它找不到 class 的任何注释,而不会报告错误或警告。它找不到这些注释的原因是它们在 mscorlib.dll 中定义,您必须在命令行的引用中明确包含它们。

在我给出的示例中成功应用注释的正确命令是:

ikvmc -target:library -assemblyattributes:AssemblyInfo.class -r:mscorlib.dll hello.jar