Обнаружение ссылок на саморекурсивные сборки в .NET Framework - PullRequest
5 голосов
/ 23 августа 2009

Я писал некоторый код C #, рекурсивно обходя ссылочные сборки базовой сборки, создавая направленный ациклический граф этих ссылок для топологической сортировки. Я делаю это с помощью метода GetReferencedAssemblies () в классе Assembly.

При тестировании кода я обнаружил - к моему удивлению - что некоторые сборки в .NET Framework, по-видимому, указываются как ссылки на сборки. Одним из таких примеров является System.Transactions, версия = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 , в котором перечислены System.Transactions, версия = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 в качестве справки, что можно проверить в Reflector.

Как только я понял это, было тривиально разорвать бесконечную рекурсию, сравнивая AssemblyNames, но мне любопытно, что я не смог создать саморекурсивную сборку самостоятельно. (Я не могу получить от Google никакой информации об этом, и добавление себя в качестве ссылки не делает полученную сборку саморекурсивной.)

Короче говоря: действительно ли ссылки на саморекурсивные сборки действительно "кошерные" - каково было бы обоснование для некоторых системных сборок ссылаться на себя?

Спасибо.

1 Ответ

3 голосов
/ 23 августа 2009

Вчера был задан вопрос под названием Как Microsoft создала сборки с циклическими ссылками? , которые могли бы объяснить больше о том, как это делается. Я не могу придумать вескую причину, чтобы сборка имела ссылку на себя.

...