【问题标题】:How do I make IKVM compiler apply assembly attributes如何让 IKVM 编译器应用程序集属性
【发布时间】:2015-03-30 13:28:34
【问题描述】:

我正在尝试使用 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。

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

【问题讨论】:

    标签: .net ikvm


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2011-02-19
      • 2011-11-25
      相关资源
      最近更新 更多