我需要创建一个由 2 个模块组成的 .NET 程序集:1 个带有本机代码的内部(在 DLL 中)和 1 个外部(在 .netmodule 文件中)。
这很容易做到,除了原生部分。
C# 的编译器可以做到这一点(这是我想要的,但使用本机代码):
csc /t:library /out:foobar.dll foo.cs /out:bar.netmodule bar.cs
-foobar.dll (contains assembly manifest and foo's IL)
-internal module foobar.dll (contains foo's IL)
-external module bar.netmodule (contains bar's IL)
C++ 编译器/链接器会将所有内容放在 1 个内部模块中。
cl /clr /LD foo.cpp /link bar.netmodule /LTCG
OR link /out:foobar.dll foo.netmodule bar.netmodule
-foo(bar).dll (contains IL for both foo and bar, as well as assembly manifest)
汇编链接器仅执行外部模块:
al /out:foobar.dll foo.netmodule bar.netmodule
-foobar.dll (only contains manifest)
-external module foo.netmodule (contains foo's IL)
-external module bar.netmodule (contains bar's IL)
我也尝试过手动调整 IL,但 ILDASM 和 ILASM 似乎无法往返本机代码:
ildasm foobar.dll /out=foobar.il
ilasm /dll foobar.il
-lots of errors
为了澄清,我想要的是:
-foobar.dll (contains assembly manifest and foo's IL AND NATIVE CODE)
-internal module foobar.dll (contains foo's IL AND NATIVE CODE)
-external module bar.netmodule (contains bar's IL)