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