У нас есть приложение .Net AppA, которое включает сборки LibA и LibB.
LibB также ссылается на LibA; он был построен некоторое время назад и помещен в наш репозиторий пакетов, поэтому он был построен на основе более старой версии LibA, чем та, которая включена непосредственно в AppA. Ни одна из библиотек не имеет конкретных названий.
Когда мы запускаем AppA в том виде, в каком он построен, используется только последняя версия LibA; все ссылки на LibA из LibB с радостью используют последнюю версию, а не версию, для которой был создан LibB.
Однако, когда мы помещаем эти сборки в Dotfuscator, Dotfuscator обрабатывает ссылки на LibA из LibB так, как если бы они ссылались на совершенно другую сборку, а не на LibA, которую мы передаем в Dotfuscator. Следовательно, в запутанном приложении ссылки из LibB на LibA не обновляются, чтобы отразить запутывание LibA, и поэтому не работают во время выполнения.
Чтобы решить эту проблему, необходимо убедиться, что все наши сборки основаны на одной и той же версии других сборок. Это исправляет запутанное приложение, но в некотором роде нарушает цель нашей стратегии управления пакетами, которая должна позволить каждой из наших библиотек развиваться в своем собственном темпе. Трудно масштабировать с большим количеством разрабатываемых нами пакетов.
Мне не хватает какого-то переключателя или параметра в Dotfuscator (мы используем коммерческую версию 4.8, но можем обновить), который заставит его разрешать ссылки на сборки только по имени, так же, как .Net во время выполнения, поэтому обфускация будет работать как мы ожидаем?