Мне нужно создать сборку .NET, состоящую из 2 модулей: 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)