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

时间:2015-03-27 14:42:57

标签: .net ikvm

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

这就是我正在做的事情。

我有一个Hello.java文件:

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

我这样编译:{{1​​}}

我把它变成一个罐子:javac Hello.java

我生成核心库存根jar:jar cvf hello.jar Hello.class

我有一个AssemblyInfo.java文件:

ikvmstub mscorlib

我这样编译:{{1​​}}

然后我运行ikvmc来生成我的DLL:@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 {}

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

IKVM版本为8.0.5449.1。

任何人都可以帮我找出我做错了吗?

1 个答案:

答案 0 :(得分:2)

好的,既然没有人加紧回答这个问题,我下载了IKVM源代码并带着调试器前往城镇。

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

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

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