1. ホーム
  2. .net

[解決済み] Microsoftはどのようにして循環参照を持つアセンブリを作成したのですか?

2022-11-14 18:32:44

質問

.NET BCLでは、以下のような循環参照があります。

  • System.dll そして System.Xml.dll
  • System.dll そして System.Configuration.dll
  • System.Xml.dll そして System.Configuration.dll

以下は、私が言いたいことを示す.NET Reflectorのスクリーンショットです。

Microsoft がどのようにしてこれらのアセンブリを作成したのか、私には謎です。 これを可能にするために、特別なコンパイル プロセスが必要なのでしょうか。 何か面白いことが起こっているのではないかと想像しています。

どのように解決するのですか?

Mono Projectがどのように行っているかは、私が知る限りではありません。コードはぐちゃぐちゃになりますが、定理はとても簡単です。

彼らは最初に System.Configuration.dll を、System.Xml.dll への参照を必要とする部分なしでコンパイルします。この後、System.Xml.dll を通常の方法でコンパイルします。さて、ここからが本番です。System.Xml.dllへの参照を必要とする部分を含むSystem.configuration.dllを再コンパイルするのです。これで、循環参照によるコンパイルが成功しました。

要するに

  • Aは、BとBへの参照を必要とするコードなしでコンパイルされます。 はBとBへの参照を必要とするコードなしでコンパイルされます。
  • B はコンパイルされます。
  • A をリコンパイルします。