Лучшая практика для уменьшения раздувания с помощью вспомогательной / служебной библиотеки для нескольких проектов - PullRequest
3 голосов
/ 27 февраля 2011

Хорошо, у меня есть приложение, которое я разработал, назовем его Project A. Функции, которых нет в Microsoft .NET Framework, я поместил в общую библиотеку, давайте назовем это MyLib.

Теперь Project B, C, D, E также использует MyLib (много проектов).Мой "MyLib" медленно добавлялся в течение 4 или 5 лет.

Проблема, с которой я столкнулся сейчас, заключается в том, что MyLib огромный .Ну, 5 МБ, но я называю это огромным.

Вопрос, который у меня есть, должен ли я, могу ли я, и как я могу скомпилировать свои проекты с MyLib , но убрать неиспользуемые функции, классы и т. Д. ИзMyLib ?Поразительно, что мои приложения Hello World, которые используют 1 крошечную статическую функцию из MyLib, приводят к 6 МБ HelloWorld.exe (после ilmerge).

FOSS> Payware.

Ответы [ 4 ]

3 голосов
/ 27 февраля 2011

То, что вы ищете, это Mono Linker , и его исходный код находится на GitHub . Автономный инструмент используется не часто, но, поскольку это один из этапов их компиляции для iPhone, я полагаю, что libs надежны.

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

0 голосов
/ 27 февраля 2011

Возьмем некоторые подсказки из самой .Net Framework.Если в MyLib много вспомогательных объектов и функций Text, а также много, скажем, объектов и функций Web-помощников, разделите их на два отдельных проекта и пространства имен.

Конечно, я рекомендую это только потому, что вас это беспокоит,Лично у меня гораздо больше любимых мозолей, чем несколько слегка увеличенных DLL.

Поскольку вы говорите, что VS работает медленнее, я предполагаю, что вы имеете в виду, что вы включаете проект MyLib, а не только DLL.Я бы прекратил это делать немедленно.Запустите сборку MyLib и просто включите ссылку на DLL.

0 голосов
/ 27 февраля 2011

AFAIK, есть только мучительный путь: разделите вашу библиотеку на функциональные части.Это будет означать прохождение различных проектов, которые используют MyLib и добавление соответствующих новых ссылок, но я не вижу другого пути.И это тоже сложная часть: определение границ этих функциональных единиц.Если вы не будете осторожны, вы можете (например) сослаться на 6 различных сборок, где ранее была только одна, что ухудшает ситуацию.

Оцените очень осторожнопроекты используют и не используют, прежде чем идти по этому пути.

0 голосов
/ 27 февраля 2011

Похоже, вам нужно сгруппировать библиотечные функции в более мелкие разделы. Вместо того, чтобы взять свой громоздкий швейцарский армейский нож. Просто разбейте его на более мелкие части.

«Лучшая практика» - закрывать свой mylib модульными тестами и медленно проводить рефакторинг этих классов.

«Лучшая практика» будет разделена на эти группы. Посмотрите на .net Framework. Там нет ни одной огромной точки .dll

...