【问题标题】:FxCop: control assembly referenced by analyzed assembly not being loadedFxCop:被分析的程序集引用的控制程序集未加载
【发布时间】:2009-12-07 21:26:14
【问题描述】:

FWIW:Windows 7 64 位、Compact Framework v3.5、FxCop v1.36(运行 fxcopcmd.exe)

我在让 FxCop 1.36 正常运行时遇到问题。我正在使用来自http://www.dotneti18n.com/Downloads.aspx的全球化规则分析一个紧凑的框架应用程序

我正在分析的 .exe 引用了第 3 方控制套件:resco.outlookcontrols.cf.dll。当 fxcop 运行并分析我的应用程序时,它会说找不到这个程序集。我已经检查、重新检查并检查了 30 多次,以确保运行应用程序所需的所有程序集都与正在分析的程序集位于同一文件夹中 - 包括 resco dll。

使用融合日志查看器,我可以得到这些信息:

日志:DisplayName = Resco.OutlookControls.CF3,版本 = 6.7.0.0,文化 = 中性,PublicKeyToken = 7444f602060105f9 (完全指定) 日志:Appbase = file:///D:/Dev/TA/Tools/FxCop/ 日志:初始 PrivatePath = NULL 日志:动态基础 = NULL 日志:缓存基础 = NULL 日志:AppName = NULL 调用程序集:(未知)。 === LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件:D:\Dev\TA\Tools\FxCop\fxcopcmd.exe.Config 日志:使用 C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config 中的机器配置文件。 日志:政策后参考:Resco.OutlookControls.CF3,版本=6.7.0.0,文化=中性,PublicKeyToken=7444f602060105f9 日志:GAC 查找不成功。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/Tools/FxCop/Resco.OutlookControls.CF3.DLL。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.DLL。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Rules/Resco.OutlookControls.CF3.DLL。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Rules/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.DLL。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Engines/Introspection/Resco.OutlookControls.CF3.DLL。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Engines/Introspection/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.DLL。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Resco.OutlookControls.CF3.EXE。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.EXE。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Rules/Resco.OutlookControls.CF3.EXE。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Rules/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.EXE。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Engines/Introspection/Resco.OutlookControls.CF3.EXE。 日志:正在尝试下载新的 URL 文件:///D:/Dev/TA/FxCop/Engines/Introspection/Resco.OutlookControls.CF3/Resco.OutlookControls.CF3.EXE。 LOG:所有探测 URL 都已尝试并失败。

这是让我非常沮丧的部分:fxcop 文档(此处为 http://msdn.microsoft.com/en-us/library/bb429449%28VS.80%29.aspx)说,它将从分析程序集所在的同一文件夹或 / 引用的文件夹中加载所有引用的程序集目录:命令行选项。

它没有兑现书面承诺。该文件确实存在于与正在分析的文件相同的文件夹中,我尝试将该文件夹作为 /directory: 命令行选项传递。我什至在 .fxcop 文件中设置了 AssemblyReferenceDirectories 元素。然而,根据融合日志,唯一被搜索的地方是探测的“通常”位置。

并且仅供参考 - 我尝试更新 fxcopcmd.exe.config 中的“探测”设置 - 不起作用,因为正在分析的程序集的文件夹不在 fxcop 工具的根文件夹下,所以它给了我一个警告说它不会被探测。

其他人有这个问题吗?有人有解决办法吗?

谢谢

【问题讨论】:

    标签: .net reference fxcop assembly-resolution fusion-log-viewer


    【解决方案1】:

    问题原来是多线程分析。为构建服务器关闭它可以让它工作。

    【讨论】:

      【解决方案2】:

      我同意 Procmon (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)(在推特上发给你,但不确定你是否能看到)。

      它会显示 FxCop 试图访问的任何磁盘活动,并在找不到任何内容时进行标记。它只是抽出很多细节,只需要一点时间来掌握过滤器,然后你就走了。

      【讨论】:

        【解决方案3】:

        此 CF 应用程序是否使用 Any CPU 配置编译? Resco 控件程序集是否只有 32 位?

        我在使用 System.Data.SQLite 二进制文件(32 位)并针对任何 CPU 进行编译的 x64 机器上遇到问题。解决方法是将项目更改为使用 Visual Studio 中的 x86 配置而不是 Any CPU 进行编译。

        【讨论】:

        • 这似乎很可能。我会检查一下。
        • 我们遇到过这样的问题,“任何 CPU”的危险在于,如果可以的话,它总是会选择 x64。
        猜你喜欢
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 2012-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多