Объединенная DLL-библиотека mkbundle вызывает исключение недопустимых метаданных при обращении в другие проекты

У меня есть решение.NET 4.0 с примерно 10 проектами, которые я успешно компилирую на моно 2.10.8.1 в Ubuntu Desktop 12.04, работающем в виртуальной машине.

Я пытаюсь запустить mkbundle, чтобы объединить все 10 библиотек DLL в одну библиотеку DLL, которую я могу затем использовать в других решениях (например, в некоторых базовых библиотеках, которые будут активно использоваться в приложениях более высокого уровня).

Это то, что я бегу, чтобы построить решение:

xbuild /nologo CoreApp.sln

Затем я запускаю следующее, чтобы объединить библиотеки DLL:

mkbundle -c --nomain -o Build/CoreApp.dll Build/FirstLibrary.dll Build/SecondLibrary.dll Build/ThirdLibrary.dll

Это успешно завершается, и я получаю CoreApp.dll.

Однако, когда я пытаюсь построить зависимое решение, я получаю следующее исключение:

Error CS0009: Metadata file `/home/user/project/Build/CoreApp.dll' does not contain valid metadata (CS0009) (HigherLevelApp.Impl)

Я был бы рад предоставить больше информации, если это необходимо.

2 ответа

Решение

mkbundle предназначен для создания автономного двоичного файла, а не для объединения нескольких библиотек в одну.

Вы хотите что-то вроде il-merge.

mkbundle не является слиянием IL. Выходные данные инструмента являются автономным приложением (с самим моно или без него). Как таковой, он больше не может использоваться другими проектами.NET.

Какие mkbundle позволяет вам распространять один файл, который содержит все необходимое для выполнения одного.NET-приложения.

То, что вы ищете, это способ объединить несколько сборок в новую сборку. У Microsoft есть такой инструмент, и некоторые другие продукты (многие из которых основаны на Mono.Cecil) делают подобные вещи.

Другие вопросы по тегам