2013-05-31 2 views
8

Существует ли утилита для разделения единой сборки .NET на подмножество полной сборки? То есть «функциональный инверсный» ILMerge.exe?Существует ли ILSplit.exe, что эквивалентно ILMerge.exe или как это сделать?

Этот инструмент, конечно, будет трудно изготовить, если он должен отслеживать зависимости и т. Д. Между классами, функциями и т. Д.

Однако, я ищу для случая, когда у меня есть очень большая (сотни МБ) сборка смешанного режима, в основном статичные классы и статические методы, в основном просто библиотека функций. Хотя, с некоторой инициализацией DLLMain и аналогичной.

Что я хотел бы, так это указать список статических методов для определенных статических классов, которые я хочу сохранить в сборке подмножества. Технически это должно быть возможным, поскольку сборка - это просто двоичная информация со стандартизованным форматом.

Так ли это существует или как это можно сделать? Или почему это было бы непрактичным?

+1

Похож на плохую идею. Как насчет того, если вы создадите проект P.exe, ссылающийся на A.Dll, но функция A была перенесена в B.dll? Вы должны реорганизовать DLL на уровне исходного кода один раз для всех, вместо того, чтобы настраивать это так. –

+0

Да, конечно, это рекомендуемый подход, но по ряду причин было бы более целесообразно это делать потом. Из-за смешанного режима я предполагаю, что это будет чрезвычайно сложно сделать. Размер исходит от ссылки в массивных родных libs. Ваш комментарий также подразумевает, что у меня есть доступ к исходному коду. – nietras

ответ

3

Нет, очень высокие шансы, что этого инструмента не существует. Хотя отсутствие инструмента никогда не может быть опровергнуто положительно.

Эти IL-переписывающие трюки в любом случае не работают на сборках в смешанном режиме, ILMerge также не поддерживает их. Такие сборки не просто содержат IL, они также имеют машинный код и таблицу перемещения. Нет простого способа разделить машинный код, в основном потому, что он не просто чистый код, но и содержит данные. Как таблицы перехода для оператора switch. Также причина, по которой программисты, которые пишут код на родном языке, не беспокоят обфускаторы. Декомпиляционный машинный код является основным потоком времени и всегда несовершенен.

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

+0

Во вторую часть вашего ответа: OP подразумевал, что у них нет исходного кода для сборки. – svick