Страница 1 из 2

Удаление и поиск зависимостей DLL

СообщениеДобавлено: 19 авг 2019, 00:14
hromoyDron
Добрый день.

Со временем мой проект оброс кучей dll. Сейчас их размер в сборке 13мб.
Некоторые библиотеки я испольную напрямую через using. Но некоторые я даже не знаю откуда могли взяться.
Как понять что именно вызвало зависимость и как можно удалить ненужные библиотеки?

Скрытый текст:
Dependency assembly - System.Diagnostics.StackTrace.dll
Dependency assembly - System.Globalization.Extensions.dll
Dependency assembly - System.Runtime.Serialization.Xml.dll
Dependency assembly - System.Xml.XPath.XDocument.dll
Dependency assembly - netstandard.dll
Dependency assembly - Mono.Security.dll
Dependency assembly - System.ComponentModel.Composition.dll
Dependency assembly - System.Configuration.dll
Dependency assembly - System.Core.dll
Dependency assembly - System.Data.dll
Dependency assembly - System.Drawing.dll
Dependency assembly - System.EnterpriseServices.dll
Dependency assembly - System.IO.Compression.FileSystem.dll
Dependency assembly - System.IO.Compression.dll
Dependency assembly - System.Net.Http.dll
Dependency assembly - System.Numerics.dll
Dependency assembly - System.Runtime.Serialization.dll
Dependency assembly - System.ServiceModel.Internals.dll
Dependency assembly - System.Transactions.dll
Dependency assembly - System.Xml.Linq.dll
Dependency assembly - System.Xml.dll
Dependency assembly - System.dll
Dependency assembly - mscorlib.dll
Dependency assembly - UnityEngine.UI.dll
Dependency assembly - UnityEngine.Networking.dll
Dependency assembly - UnityEngine.Timeline.dll
Dependency assembly - Unity.Analytics.DataPrivacy.dll
Dependency assembly - Unity.TextMeshPro.dll

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 19 авг 2019, 09:10
DbIMok
все что в Plugins положили то и попало. можно открыть dll с кодом через dnSpy и посмотреть список "прямых" зависимостей. если рефлексию не используете, то все остальные можно удалить из Plugins

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 19 авг 2019, 21:58
hromoyDron
Для эксперимента полностью удалил папку Plugins. Пакпки Temp и Library тоже чистил. Библиотек в сборке меньше не стало.

Проверил на пустом проекте. Даже абсолютно пустой проект тащит с собой приличное количество dll.
Хотя как я знаю базовым является только mscorlib.dll

Список dll в пустом проекте. Откуда тут даже System.Xml вообще непонятно. (но в основном проекте я ей пользуюсь)
Скрытый текст:
Dependency assembly - Mono.Security.dll
Dependency assembly - System.Configuration.dll
Dependency assembly - System.Core.dll
Dependency assembly - System.Xml.dll
Dependency assembly - System.dll
Dependency assembly - mscorlib.dll
Dependency assembly - UnityEngine.UI.dll
Dependency assembly - UnityEngine.Networking.dll
Dependency assembly - UnityEngine.Timeline.dll

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 19 авг 2019, 23:25
DbIMok
hromoyDron писал(а):Даже абсолютно пустой проект

абсолютно пустой это с отключенными packages in project и built-in packages. но это не поможет
hromoyDron писал(а):Хотя как я знаю базовым является только mscorlib.dll

где это написано? пошлем юнитекам багрепорт, ткнем носом в их какашку
hromoyDron писал(а):System.Xml

там взаимозависимости, смотрите в dnSpy, dotPeek. у меня нет хорошего ответа на этот вопрос. если они вам не нужны - удалите

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 00:11
seaman
Ради интереса сделал совсем пустой проект. Т.е. убрал все пакеджи:
Изображение
Убрал все встроенные пакеджи:
Изображение
Пустая сцена и пустой проект
И обнаружил несколько десятков dll в сборке. Самое интересное, что там все выключенные модули!
Изображение
Т.е. включаешь их, выключаешь - пофиг. Они все равно в билде.

На всякий случай проверил manifest. В нем, как и ожидалось один package-manager-ui:
Синтаксис:
Используется javascript
{
  "dependencies": {
    "com.unity.package-manager-ui": "2.1.2"
  }
}


Это в 2018.3 и в 2019.1

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 01:00
hromoyDron
И что в таком случае делать? Насильно удалять dll руками?

Правильно ли я понимаю, что для удаления нужно в файле Assembly-CSharp-Editor найти путь интересующей библиотеки и удалить ее именно по этому адресу?

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 02:53
DbIMok
hromoyDron писал(а):Насильно удалять dll руками?

про удаление это была шутка. нельзя их удалять
seaman писал(а):Самое интересное, что там все выключенные модули!

я предупреждал - не поможет. нельзя отключить managed либы потому что они жестко прописаны в зависимостях UnityEngine.dll. эта модульность сделана для il2cpp. там отключение ненужных модулей реально дает выигрыш в размере (у меня было что-то порядка -0.5 МБ размера apk)

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 03:08
hromoyDron
в итоге dll в пустом проекте занимают 9мб
получается с этим ничего не сделать и остается только смириться?

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 05:34
DbIMok
попробуйте собрать il2cpp билд. в моем случае это увеличивает размер apk примерно на мегабайт. у вас может уменьшит

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 12:51
hromoyDron
Я собираю билд под WebGL и насколько понимаю, WebGL поддерживает только IL2CPP и даже не дает выбора.

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 15:37
DbIMok
где в WebGL билде .dll?

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 17:22
AngryCat
Чтобы убрать ненужные dll:
Изображение
И в Edit References убери ненужные dll :/

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 20 авг 2019, 17:33
DbIMok
AngryCat писал(а):И в Edit References убери ненужные dll

это сработало бы, если бы ты их вручную добавлял удалял. но так как этим занимается юнити автоматически...

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 21 авг 2019, 00:04
hromoyDron
DbIMok писал(а):где в WebGL билде .dll?


Где именно зашиты я не знаю, но в консоли во время сборки билда, где выводится информация о размере указано 13мб.

AngryCat писал(а):в Edit References убери ненужные dll :/


Убрал, но эффекта это никакого не дало. Можно хоть System убрать, которую я сам использую, даже ругаться не будет.

Re: Удаление и поиск зависимостей DLL

СообщениеДобавлено: 21 авг 2019, 12:58
IDoNotExist
hromoyDron писал(а):
DbIMok писал(а):где в WebGL билде .dll?


Где именно зашиты я не знаю, но в консоли во время сборки билда, где выводится информация о размере указано 13мб.

Нет для WebGL такого понятия как .dll.
Спасти положение отчасти может галочка Strip Engine Code (должна быть активна) плюс правильный выбор CompressionFormat.