Смешанная многофайловая сборка .NET - PullRequest
2 голосов
/ 25 октября 2009

Мне нужно создать сборку .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)

Ответы [ 3 ]

3 голосов
/ 26 октября 2009

Хенк уже на правильном пути. Вы можете создать .netmodule для ввода только для создания сборок. Сборка - это самая маленькая исполняющая единица в среде .NET. Сборка может состоять из одного или нескольких физических файлов. Он может содержать несколько ресурсов: файлы ресурсов, сетевые модули и собственные библиотеки DLL. Сетевой модуль не может быть развернут сам по себе, он должен быть связан в сборку.

Теперь, когда нам это удалось, давайте попробуем сосредоточиться на том, что вам нужно. Вы пытаетесь создать многофайловую сборку? Это возможно Вот довольно старый, но все еще полезный пост о многомодульных сборках. Или вы пытаетесь создать сетевые модули, которые можно использовать в качестве библиотек? Потому что это невозможно, потому что сетевые модули не содержат сборки.

Если это не отвечает на ваш вопрос, можете ли вы более подробно объяснить, каким должен быть конечный результат и / или как вы ожидаете его использовать?

2 голосов
/ 22 декабря 2012

Похоже, что эта проблема решена в System.Data.Sqlite . Смотрите файл SQLite.Interop / SQLite.Interop.2010.vcxproj .

В элементе <Link/> необходимо указать сетевые модули в модуле <AdditionalDependencies/>.

1 голос
/ 31 июля 2010

Отказ от ответственности: не проверено.

Вы ищете правильный вариант компилятора cl ?

cl /clr:pure /LN Stringer.cpp
cl /clr:pure Client.cpp /link /ASSEMBLYMODULE:Stringer.netmodule

Я удивлен, что link.exe в ссылке, предоставленной Абелем, у вас не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...