Я писал некоторый код 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 никакой информации об этом, и добавление себя в качестве ссылки не делает полученную сборку саморекурсивной.)
Короче говоря: действительно ли ссылки на саморекурсивные сборки действительно "кошерные" - каково было бы обоснование для некоторых системных сборок ссылаться на себя?
Спасибо.