FxCop: контрольная сборка, на которую ссылается проанализированная сборка, не загружается - PullRequest
0 голосов
/ 08 декабря 2009

FWIW: Windows 7 64bit, Compact Framework v3.5, FxCop v1.36 (работает fxcopcmd.exe)

У меня проблемы с корректной работой FxCop 1.36. Я анализирую компактное фреймворковое приложение с правилами глобализации от http://www.dotneti18n.com/Downloads.aspx

.exe, который я анализирую, имеет ссылку на сторонний пакет управления: resco.outlookcontrols.cf.dll. Когда fxcop запускает и анализирует мое приложение, оно взрывается, говоря, что не может найти эту сборку. Я проверил, перепроверил и еще 30 раз проверил, что все сборки, необходимые для запуска приложения, находятся в той же папке, что и анализируемая, включая файлы восстановления.

с помощью программы просмотра журнала Fusion, я могу получить эту информацию:

LOG: DisplayName = Resco.OutlookControls.CF3, Version=6.7.0.0, Culture=neutral, PublicKeyToken=7444f602060105f9
 (Fully-specified)
LOG: Appbase = file:///D:/Dev/TA/Tools/FxCop/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: D:\Dev\TA\Tools\FxCop\fxcopcmd.exe.Config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: Resco.OutlookControls.CF3, Version=6.7.0.0, Culture=neutral, PublicKeyToken=7444f602060105f9
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///D:/Dev/TA/Tools/FxCop/Resco.OutlookControls.CF3.DLL.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.DLL.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Rules/Resco.OutlookControls.CF3.DLL.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Rules/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.DLL.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Engines/Introspection/Resco.OutlookControls.CF3.DLL.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Engines/Introspection/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.DLL.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Resco.OutlookControls.CF3.EXE.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.EXE.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Rules/Resco.OutlookControls.CF3.EXE.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Rules/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.EXE.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Engines/Introspection/Resco.OutlookControls.CF3.EXE.
LOG: Attempting download of new URL file:///D:/Dev/TA/FxCop/Engines/Introspection/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.EXE.
LOG: All probing URLs attempted and failed.

вот часть, которая действительно меня расстраивает: документация fxcop (здесь http://msdn.microsoft.com/en-us/library/bb429449%28VS.80%29.aspx) говорит, что она загрузит все ссылочные сборки из той же папки, в которой находится анализируемая сборка, или из папки, на которую ссылаются с помощью параметра / directory: командной строки.

это не соответствует задокументированным обещаниям. файл существует в той же папке, что и анализируемый, и я попытался передать папку в качестве параметра / directory: командной строки. я даже установил элемент AssemblyReferenceDirectories в файле .fxcop. все же единственные места, которые ищутся, согласно журналу слияния, являются «обычными» местами для исследования.

и fyi - я попытался обновить настройки 'probeing' в файле fxcopcmd.exe.config - не будет работать, поскольку папка анализируемой сборки не находится в корневой папке инструмента fxcop, поэтому она дает мне предупреждение о том, что оно не будет проверено.

У кого-нибудь еще есть эта проблема? у кого-нибудь есть решение?

спасибо

Ответы [ 3 ]

1 голос
/ 28 декабря 2009

проблема оказалась многопоточным анализом. отключив его для сервера сборки, он заработал.

0 голосов
/ 10 декабря 2009

Это приложение CF скомпилировано с использованием конфигурации Any CPU? Является ли блок управления Resco только 32-разрядным?

У меня были проблемы на компьютере x64 с двоичным файлом System.Data.SQLite (который является 32-разрядным) и компиляцией с любым процессором. Обходным решением было изменить проект для компиляции с использованием конфигурации x86 в Visual Studio вместо любого процессора.

0 голосов
/ 10 декабря 2009

Я согласен с Procmon (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) (написал вам об этом, но не уверен, что вы видите).

Он покажет любую активность диска, к которой пытается получить доступ FxCop, и отметит, если он не сможет что-то найти. Он просто прокачивает много деталей, просто требуется немного времени, чтобы освоить фильтры, и вы в отъезде.

...