これはすべて、 Crystal Reportsを参照するアセンブリをFxCopで分析しようとしているために始まりました。私がそうするたびに、FxCop は " " という名前のアセンブリへの参照を見つけることができません。この .dll を見つけようとして、まったく存在しないことに気付きました...ハード ドライブやGACにはありませんが、アプリケーション自体は正常に実行され、レポートが表示されます。BusinessObjects.Licensing.KeycodeDecoder
それが私をいくつかの狩りに導きました...
このCrystalDecisions.CrystalReports.Engine.dll
ファイルをILDASMで開くと、マニフェストに参照が含まれます。
.assembly extern BusinessObjects.Licensing.KeycodeDecoder
{
.publickeytoken = (69 2F BE A5 52 1E 13 04 ) // i/..R...
.ver 13:0:2000:0
}
ただし、Fusion Logger (fuslogvw) を開いてアプリケーションを実行すると、Fusion がそれを含む多数の Crystal アセンブリをロードしているのを確認できますCrystalDecisions.CrystalReports.Engine
が、参照されているBusinessObjects.Licensing.KeycodeDecoder
アセンブリをロードしようとすることさえありません。
なぜ?.NET ランタイムは、実行時にその参照をスキップする、またはロードしないことをどのように認識しますか? Fusion がすべての参照アセンブリを再帰的にロードしないのはなぜですか? その背後にある論理、推論、または設計意図を探しているだけです...
おそらく同じくらい重要なのは、.dll への参照を持つ .NET プロジェクトを作成できるのに、それらの参照が強制されないのはなぜでしょうか? IMO、インストールさえされない他のアセンブリを参照する Crystal アセンブリをSAPが出荷できるのは間違っています。