Это все началось, потому что я пытаюсь FxCop проанализировать мою сборку, которая ссылается на Crystal Reports . Каждый раз, когда я это делаю, FxCop не может найти ссылку на сборку с именем "BusinessObjects.Licensing.KeycodeDecoder
". Пытаясь найти этот .dll, я пришел к выводу, что он вообще не существует ... он не находится на жестком диске или GAC , но само мое приложение работает и отображает отчеты просто хорошо.
Так что это привело меня к охоте ...
В файле 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 не загружает каждую ссылочную сборку рекурсивно? Я просто ищу какую-то логику, рассуждения или конструктивные намерения за всем этим ...
Возможно, не менее важно, почему могут создаваться проекты .NET, имеющие ссылки на .dll, но эти ссылки не применяются? IMO, неправильно, что SAP может поставлять сборки Crystal, которые ссылаются на другие сборки, которые даже не устанавливаются.