Tag: fxcop

FxCop和GAC疯狂

当我尝试分析依赖于模式和实践的项目时,使用FxCop,企业库数据(以及其他)2.0.0.0 – FxCop抱怨它不能:“找到程序集参考” – 即使正在分析的应用程序dll已被遵守此版本及其在GAC中的版本。 如果我浏览到GAC尝试选择相同的程序集(我已经检查了版本和公钥令牌),FxCop将不允许我“打开”它。 应用程序成功运行并且肯定会使用问题dll。 操作系统:同时适用于Vista和Windows XP。 版本:Visual Studio 2005和2008. FxCop 1.36应用程序符合VS2005 for .NET 2.0。 如果我尝试使用Reflector浏览应用程序DLL,我会遇到同样的问题。 很明显,它并不认为这与它编译的程序集的版本相同。 有谁知道为什么? 对解决方案的任何建议? 我错过了什么?

c#warning – 使用NeutralResourcesLanguageAttribute标记程序集

我收到以下警告: “ CA1824标记具有NeutralResourcesLanguageAttribute的程序集” 根据MSDN,原因是:程序集包含基于ResX的资源,但没有应用System.Resources.NeutralResourcesLanguageAttribute。 谁能解释一下这意味着什么? 我不想定义具体的文化背景。 我希望它们可以自定义。

如何获取FxCop中callvirt IL指令实际调用的方法

我仍然试图让我的FxCop规则正常工作。 作为其中的一部分,我需要弄清楚方法调用的方法。 以前我使用的是CallGraph.CallersFor() (反过来做,这是我最后的目标),但它似乎有我在下面描述的相同问题。 作为使用CallGraph类的替代方法,我尝试访问所有方法调用以构建字典,基于以下代码: public override void VisitMethodCall(MethodCall call) { Method CalledMethod = (call.Callee as MemberBinding).BoundMember as Method; // …. } 但是,事实certificate,如果被调用的方法在派生类上覆盖基类的方法,那么BoundMember是基类’方法,而不是子类’方法(实际上将被调用的方法) 。 问题:如何获得在FxCop中使用callvirt IL指令时将调用的方法?

CA1500与SA1309 – 哪一个获胜?

我的前缀是说我理解Code Analysis和StyleCop都是指导原则,很多人都选择忽略它们。 但话说回来,我想看看这两条规则的普遍共识是什么。 规则CA1500表示不要使参数名称和私有字段名称相同。 另一方面, 规则SA1309表示不要为成员添加下划线或“m_”作为前缀。 这使我们几乎没有选择区分私有支持字段与其相应的参数。 拿这些例子。 SA1309抱怨: class SomeClass { int _someField; public SomeClass(int someField) { this._someField = someField; } } CA1500抱怨: class SomeClass { int someField; public SomeClass(int someField) { this.someField = someField; } } 我有什么选择? 我不想创建私有支持字段PascalCase,因为这是公共字段/属性的(我相信相当普遍的)约定。 而且我不想重命名其中一个,只是为了解决歧义。 所以我留下了上面两个中的一个,这将要求我压制其中一个SA / CA规则。 你们通常做什么? 更重要的是,这些规则的作者认为你应该做些什么(因为它们都没有在他们的文档中提供替代解决方案)?

嵌套使用语句和Microsoft代码分析

最近我开启了额外的代码分析规则。 令我惊讶的是,我在一个我一直在考虑作为最佳实践的地方看到了违规行为。 如果我有两个嵌套的一次性用品,我会使用两个这样的语句: using (StringReader strReader = new StringReader(xmlString)) using (XmlReader xmlReader = XmlReader.Create(strReader)) { result.ReadXml(xmlReader); } 这也对应于C#中高评级的Q&A 嵌套使用语句 我得到的违规行为如下: Warning 18 CA2202 : Microsoft.Usage : Object ‘strReader’ can be disposed more than once in method ‘????’. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: […]

在代码分析中使用Microsoft.Bcl.Async会导致错误

我正在尝试使用Microsoft.Bcl.Async和代码分析,但是当我运行代码分析时,我得到一个或多个错误。 我正在使用Visual Studio 2012和Update 2。 这对我来说很容易重现: 创建一个针对.Net 4的新默认控制台应用程序。 右键单击References然后选择Manage NuGet Packages… 单击“ Online然后在Search Online框中键入async 。 您应该看到Async for .Net Framework 4 … 单击“ Install并接受所有问题。 添加到Main()一行说: TaskEx.Delay(1000); 和一个using System.Threading.Tasks; 转到项目属性,代码分析部分,然后勾选Enable Code Analysis on Build 。 编译程序。 我收到两个代码分析错误: CA0052运行代码分析时出错CA0052:未选择任何目标。 [错误和警告](全球) CA0055运行代码分析CA0055时出错:无法加载ConsoleApplication2.exe。 读取模块“ConsoleApplication2”时遇到以下错误:无法解析成员引用:[Microsoft.Threading.Tasks,Version = 1.0.12.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a] System.Threading.Tasks.TaskEx :: Delay。 [错误和警告](全球) 我为其他测试程序获得了不同的代码分析错误。 我试过的基本Windows窗体应用程序给了我: CA0001错误运行代码分析CA0001:读取模块“AsyncForNet4”时遇到以下错误:无法解析成员引用:[Microsoft.Threading.Tasks,Version = 1.0.12.0,Culture = […]

FxCop警告CA1006有什么好的解决方法吗?

我遇到了FxCop警告CA1006 ,Microsoft.Design“DoNotNestGenericTypesInMemberSignatures”的问题。 具体来说,我正在设计一个inheritance自ReadOnlyCollection<Report>的ReportCollection类,其public构造函数将IList<Report>作为参数。 修复此警告的建议不是很有用: “要修复违反此规则的行为,请更改设计以删除嵌套类型参数。” 到目前为止,我可以通过两种方式来改变设计: 使构造函数internal 。 这在我的情况下不起作用。 构造函数必须是public因为此集合类需要通过程序集外部的代码进行实例化。 使构造函数采用Report[]而不是IList<Report> 。 这是次优的,因为外部代码应该具有使用动态大小的数据结构(如List而不是固定大小的数组)的灵活性。 此时,我放弃并压制了这个警告。 有更好的解决方案吗?

如何抑制所有类型成员的代码分析消息?

假设我列举了所有货币: public enum CurrencyType { /// /// United Arab Emirates dirham /// [EnumMember] AED = 784, /// /// Afghan afghani /// [EnumMember] AFN = 971, /// /// Albanian lek /// [EnumMember] ALL = 008, … } VS 2015代码分析一直抱怨每个成员100次违反CA1709 。 这本身就是一个有用的规则,我不想禁用它; 但在这种特定情况下,它没有多大帮助,因为CurrencyType是公共的,并且在很多其他项目中使用。 我可以压制这个消息; 但是,VS只允许我为每个成员压制它 – 这意味着我将有100个[SuppressMessage(…)]行,这将使代码混乱。 有没有办法抑制所有CurrencyType成员的所有CA1709,而不是为这个项目中的所有其他代码抑制它,而不必写100 [SuppressMessage(…)] ? SuppressMessageAttribute有一个Scope参数,但文档不清楚。 我试过放两个 [SuppressMessage(“Microsoft.Naming”, “CA1709:IdentifiersShouldBeCasedCorrectly”, Scope = “type”, […]