我刚试过FxCop.它确实检测未使用的私有方法,但不检测未使用的公共 是否有可以下载的自定义规则,插件将检测未在同一程序集中调用的公共方法?
我在服务层有接口,有几个方法,从Get和FxCop的Use属性开始,适当的规则抱怨我应该考虑使用属性.
我尝试使用SuppressMessageAttribute,但是当它在接口上定义时,它对成员方法没有影响.我是否需要将SuppressMessageAttribute放到每个方法中,还是有办法抑制整个类型的CA1024?
[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate"]
public interface IProjectService
{
// Information and statistics about projects
IList<ProjectInfo> GetProjects();
ProjectsDashboard GetProjectsDashboard();
// Project's settings
ProjectSettings GetProjectSettings(Guid id);
void SaveProjectSettings(ProjectSettings settings);
}
Run Code Online (Sandbox Code Playgroud) 有没有人有将FxCop引入遗留代码的经验?如果有人引入违反规则的代码,我们希望我们的构建失败.但就目前而言,这是不可能的,因为遗留代码有超过9000个违规行为.
抑制我所知错误的唯一方法是通过SuppressMessage属性,但这只适用于方法和GeneratedCodeAttribute.最后一个可以用于类和命名空间(如果我没记错的话),但不应该用于非生成的代码(参见这里).
现在,我们每天花一些时间来删除违规行为,但新的违规行为仍在继续,因为我们的构建不会失败.
有任何想法吗?
我有一个高质量的c#框架代码库,但我仍然希望尝试改进.
fxcop是改进.NET框架的有效工具吗?我知道Microsoft在内部使用该工具,但外部用户如何找到它?值得吗?
我已经拥有数十亿行代码和完善的风格,能否适应我们的风格并仍能提供良好的指导?
粗略地说,设置需要多长时间?小时,天,周?我会尽快学到一些有用的东西吗?
我有一段代码处理存储在数据库中的客户.有一个对象Customer,它有两个类型的属性byte[]:一个用于密码盐,另一个用于密码哈希.
使用FxCop检查代码,我看到它抱怨(CA1819,性能规则):
"返回数组的属性容易导致代码效率低下.考虑使用集合或将其作为方法.有关详细信息,请参阅设计指南."
并建议:
"更改'Customer.PasswordHash'以返回集合或使其成为方法."
我真的不明白,我正在做的代码效率低下是什么?
出于好奇,我想知道如何最好地实现一个可用于避免CA1006警告的类
CA1006:Microsoft.Design:考虑一种设计,其中'IReader.Query(String,String)'不嵌套泛型类型'IList(Of IDictionary(Of String,Object))'.
这是返回泛型类型的方法
public virtual IList<IDictionary<string, object>> Query(
string fullFileName,
string sheetName)
{
using (var connection = new OdbcConnection(
this.GetOdbcConnectionString(fullFileName)))
{
connection.Open();
return connection
.Query(string.Format(
CultureInfo.InvariantCulture,
SystemResources.ExcelReader_Query_select_top_128___from__0_,
sheetName))
.Cast<IDictionary<string, object>>()
.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
就像是
SourceData<T, U> Query(string fullFileName, string sheetName)
SourceData Query(string fullFileName, string sheetName)
Run Code Online (Sandbox Code Playgroud)
编辑:
根据Marc的建议,我在这个类中封装了嵌套泛型
public class QueryRow : List<KeyValuePair<string, object>>
{
protected internal QueryRow(IEnumerable<KeyValuePair<string, object>> dictionary)
{
this.AddRange(dictionary.Select(kvp => kvp));
}
}
Run Code Online (Sandbox Code Playgroud) 仅在我们的buildagent上使用FXCOP时遇到麻烦,并且只能通过命令行工具.
我正在使用Caliburn.Mirco框架并添加了自定义触发器,因此我可以使用删除按钮.此类实现ICommand接口
错误是:"读取模块'MyProject.UI'时遇到以下错误:无法解析类型引用:[System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089] System.Windows.Input.ICommand"
完整的错误日志
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="C:\BuildAgent\work\program files\microsoft fxcop 1.36\Xml\FxCopReport.xsl"?>
<FxCopReport Version="10.0">
<Localized>
<String Key="Category">Category</String>
<String Key="Certainty">Certainty</String>
<String Key="CollapseAll">Collapse All</String>
<String Key="CheckId">Check Id</String>
<String Key="Error">Error</String>
<String Key="Errors">error(s)</String>
<String Key="ExpandAll">Expand All</String>
<String Key="Help">Help</String>
<String Key="Line">Line</String>
<String Key="Messages">message(s)</String>
<String Key="LocationNotStoredInPdb">[Location not stored in Pdb]</String>
<String Key="Project">Project</String>
<String Key="Resolution">Resolution</String>
<String Key="Rule">Rule</String>
<String Key="RuleFile">Rule File</String>
<String Key="RuleDescription">Rule Description</String>
<String Key="Source">Source</String>
<String Key="Status">Status</String>
<String Key="Target">Target</String>
<String Key="Warning">Warning</String>
<String Key="Warnings">warning(s)</String>
<String Key="ReportTitle">Code Analysis Report</String>
</Localized>
<Exceptions> …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Microsoft.CodeAnalysis.FXCopAnalyzers(最新稳定版本)添加到我的 ASP.NET 项目中。当我通过 NuGet 安装它时,我收到了大量错误,例如:
无法从 \packages\Microsoft.CodeQuality.Analyzers.2.6.3\analyzers\dotnet\cs\Microsoft.CodeQuality.Analyzers.dll 创建分析器 Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.AbstractTypesShouldNotHaveConstructorsAnalyzer 的实例:无法加载文件或程序集'Microsoft.CodeAnalysis, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件。无法从 \packages\Microsoft.CodeQuality.Analyzers.2.6.3\analyzers\dotnet\cs\Microsoft.CodeQuality.Analyzers 创建分析器 Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.AvoidEmptyInterfacesAnalyzer 的实例.dll:无法加载文件或程序集“Microsoft.CodeAnalysis,版本=2.6.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。无法从 \packages\Microsoft.CodeQuality.Analyzers.2.6.3\analyzers\dotnet\cs\Microsoft.CodeQuality.Analyzers 创建分析器 Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.CancellationTokenParametersMustComeLastAnalyzer 的实例.dll:无法加载文件或程序集“Microsoft.CodeAnalysis,版本=2.6.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。该系统找不到指定的文件.. 版本=2.6.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。该系统找不到指定的文件.. 版本=2.6.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。该系统找不到指定的文件..
注意:为了简洁起见,我省略了 127 个错误。它们都非常相似。但需要注意的一件事是,并非所有分析器都在 Microsoft.CodeQuality 命名空间中。有些在 Microsoft.NetCore 中,有些在 Microsoft.NetFramework 中。
所以我说好的,我必须先安装Microsoft.CodeAnalysis v2.6.0.0。看起来很奇怪,这不是 NuGet 自动安装的依赖项,但无论如何。
所以我恢复了我在 Git 中的所有更改,重新打开解决方案,安装 Microsoft.CodeAnalysis v2.6.0.0,然后安装 Microsoft.CodeAnalysis.FXCopAnalyzers 的最新稳定版本。
同样的错误!
当我查看包/Microsoft.CodeAnalysis.2.6.0 时,我注意到那里没有 .dll 。安装它的正确方法是什么?安装 Microsoft.CodeAnalysis 甚至是正确的解决方案吗?为什么安装时没有自动安装Microsoft.CodeAnalysis.FXCopAnalyzers的依赖?这不是包管理器的全部意义吗?我的问题太多,答案太少。请帮忙。
我正在使用C#.net和WPF开发一个项目.我们正在使用StyleCop来帮助为项目带来一致的风格,在禁用某些规则后,我们对它非常满意.但是,我听说人们谈论FxCop,这也会为项目带来价值.从我的理解,这更多的是在代码结构基础上..?
有人可以告诉我为什么我们应该开始使用FxCop吗?FxCop将确保我们做得正确的最重要的事情是什么?
我已经得到了一些有关这方面的信息,但我仍然可以找到一个正确的答案,我最近在公司里被问到这个问题:"对该代码进行fxcop分析并告诉我结果".
好吧,我有VS2010旗舰版,它有代码分析,但在做任何评论之前,我在互联网上浏览它,因为我想实现最佳选择......
所以,假设我将在两个分析器上使用相同的规则:
谢谢,任何帮助将不胜感激
fxcop ×10
c# ×6
.net ×2
analyzer ×1
dapper ×1
generics ×1
ienumerable ×1
legacy ×1
legacy-code ×1
oop ×1
optimization ×1
performance ×1
teamcity ×1
wpf ×1