我很难说服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现在很乐意分析程序集!
导致FxCop分析失败的.ForMember方法是什么?
请注意,我遇到与.NET Framework版本4.0,4.5或4.5.1以及AutoMapper 3.0.0和3.1.0相同的行为。
答案 0 :(得分:8)
确保输出目录中存在AutoMapper.dll(在您的情况下,它是C:\ Users \ inelson \ Documents \ Visual Studio 2013 \ Projects \ ClassLibrary4 \ ClassLibrary4 \ bin \ Debug)
<强>更新强> 这是Portable Libraries和FxCop的一个众所周知的问题。请看答案:
此问题也在AutoMapper bugtracker中讨论过。
更新2: 我很确定会出现问题,因为FxCop独立版本不支持.NET 4.5和Portable Class Libraries。您可以在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中运行代码分析,它也可以运行。