FxCop 10.0 独立版无法分析使用 AutoMapper 的程序集

Posted

技术标签:

【中文标题】FxCop 10.0 独立版无法分析使用 AutoMapper 的程序集【英文标题】:FxCop 10.0 standalone failing to analyse assemblies that use AutoMapper 【发布时间】:2013-12-13 15:53:57 【问题描述】:

我很难说服 FxCop 10.0 分析引用 AutoMapper 的程序集。

我创建了一个简单的类库,通过 NuGet 引用了 AutoMapper,并添加了如下代码:

using System;

namespace ClassLibrary4

    public class Class1
    
        public void Foo()
        
            AutoMapper.Mapper.CreateMap<Obj1, Obj2>()
                      .ForMember(x => x.Name, opt => opt.Ignore());
        
    

    public class Obj1
    
        public string Name  get; set; 
    

    public class Obj2
    
        public string Name  get; set; 
    

然后我尝试使用 FxCop 10.0 通过命令行分析程序集,并收到消息:

无法加载 C:\Users\inelson\Documents\Visual Studio 2013\Projects\ClassLibrary4\ClassLibrary4\bin\Debug\ClassLibrary4.dll。

注意:找不到一个或多个引用的程序集。使用“/directory”或“/reference”开关指定其他程序集引用搜索路径。

未解决的参考是 System.Core 版本 2.0.5.0

为了隔离问题,我删除了 .ForMember 方法调用,只保留了 Foo():

public void Foo() 

    AutoMapper.Mapper.CreateMap<Obj1, Obj2>(); 

FxCop 10.0 现在可以愉快地分析程序集了!

.ForMember 方法导致 FxCop 分析失败的原因是什么?

请注意,我在使用 .NET Framework 4.0、4.5 或 4.5.1 以及 AutoMapper 3.0.0 和 3.1.0 时遇到了相同的行为。

【问题讨论】:

长镜头.. 但是您是否尝试过为 AutoMapper 扩展命名空间添加 using 语句? 使用 Fuslogvw.exe 解决程序集解析问题。 @HansPassant 我试过了,没有显示失败的绑定。 不确定你指的是哪个命名空间安迪 - 据我所知,没有 AutoMapper.Extensions 命名空间。 ForMember 不是扩展方法,它位于根 AutoMapper 命名空间中。 请提供命令 FxComCmd.exe /file:ClassLibrary4.dll /console /v 的输出。从您的问题来看,无法找到确切的程序集并不明显。通常,此错误如下所示:无法加载“Library.dll”。读取模块“库”时遇到以下错误:无法解析程序集引用:“dependencyStrongName”。 【参考方案1】:

确保 AutoMapper.dll 存在于输出目录中(在您的情况下,它是 C:\Users\inelson\Documents\Visual Studio 2013\Projects\ClassLibrary4\ClassLibrary4\bin\Debug)

更新: 这是 Portable Libraries 和 FxCop 的一个众所周知的问题。请看答案:

FxCop indirect reference to System.Core version 2.0.5.0 Unable to resolve assemblies that use Portable Class Libraries

AutoMapper bugtracker也讨论过这个问题。

更新 2: 而且我很确定会出现这个问题,因为 FxCop 独立版本不支持 .NET 4.5 和可移植类库。您可以在Visual Studio User Voice 上为适当的建议投票。

您是否尝试通过 Visual Studio 运行代码分析?

更新 3: 我尝试运行与 Visual Studio 2012 一起安装的 FxCopCmd.exe 的 11.0.50727.1 版本(我在 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Static Analysis Tools\FxCop 找到它),它似乎工作。

另外,我尝试在 Visual Studio 2012 中运行代码分析,它也可以工作。

【讨论】:

感谢 Vladimir,我还成功地分析了使用 FxCop 11 和 FxCop 12 的程序集。看来这些不能作为独立安装提供,我将看看 Visual Studio 2012/2013 是否可以安装在构建服务器。

以上是关于FxCop 10.0 独立版无法分析使用 AutoMapper 的程序集的主要内容,如果未能解决你的问题,请参考以下文章

构建后的 FxCop 10.0,VS2010 中的 [Location not stored in Pdb]

513 错误代码(退出代码)FxCop 使用 C#

VS2012 与 Fxcop 中的代码分析

FxCop 无法分析间接引用的程序集

FXCop - 找不到引用的程序集

FxCop 集成商 2012