另一个项目,Visual Studio的代码分析有这个选项.但我找不到StyleCop(AKA Source Analysis).
我想忽略的文件是dbml的.designer.cs代码,其中包含// <autogenerated>标记.一篇博文告诉我这样就足够了,但就我而言,事实并非如此.
我正在尝试对包含实体模型(edmx文件)的程序集运行代码分析.在项目属性中,我检查了"从生成的代码中抑制结果"选项,但是我仍然收到很多与自动生成的EF代码有关的CA错误.
有没有人经历过这个?是否有解决方法?
关于Visual Studio 2010的自定义代码分析规则没有太多易于查找的信息.虽然这是我在我的问题中发现的...
在CodePlex上的示例库中,展示了如何部署自定义代码分析规则库,该规则库使用安装项目将库的DLL转储到程序文件文件夹 - > Microsoft Visual Studio 10.0 - >团队工具 - >静态分析工具 - > FxCop - >规则.
此外,Duke Kamstra的一篇非常有用的how-to 博客文章还建议将库的dll复制到%Program Files%\ Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\Rules中.
我的偏好是避免在这样的全球位置粘贴DLL.我想让DLL相对于我的Visual Studio解决方案,所以当我用一些自定义代码分析规则更改更新DLL时,我不需要采取额外的步骤来保持DLL的依赖关系是最新的.
对我来说一个完美的解决方案是让我的自定义*.ruleset文件知道DLL的相对路径,但我没有成功.
有什么建议?
关于VS2010可能过于严格地应用代码分析规则CA2000的事实,有很多问题,但我似乎遇到了应该应用它的情况,但事实并非如此.
请考虑以下代码:
Image srcImage = Image.FromFile(source);
Bitmap newImage = new Bitmap(newWidth, newHeight);
using (Graphics gr = Graphics.FromImage(newImage))
{
gr.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
}
newImage.Save(destination, ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
现在,如果我在Visual Studio 2010中运行Code Analysis,它会抱怨newImage没有处理(很容易修复,把它放在另一个使用块),但是它没有抱怨srcImage(它也有Dispose()方法)我永远不会打电话).有谁知道为什么Code Analysis不会在这里抱怨?
当存在需要的IFormatProvider过载但在代码中未使用此过载时,CA1305会引发.
例如,以下代码引发此警告:
string.Format("{0} - {1}", id, name);
Run Code Online (Sandbox Code Playgroud)
摆脱此警告的明显方法是指定要使用的文化:
string.Format(CultureInfo.InvariantCulture, "{0} - {1}", id, name);
Run Code Online (Sandbox Code Playgroud)
但是,我觉得这太冗长了.
有哪些替代品?
我正在尝试将自定义FxCop(=代码分析)规则从Visual Studio 2010迁移到Visual Studio 2012.
到目前为止,它们工作正常,除了一件事:它们的名称在结果窗口中是空白的(View- > Other windows- > Code Analysis),只有CheckId和Resolution显示,而名称显示为Microsoft的规则:

令人感到奇怪的是,这个名字是在规则集编辑器中可见:

我的规则出了什么问题?
以下是两个规则在MSBuild输出中的显示方式(那里有一些可疑的东西,但我不明白为什么我有不同的消息):
6>c:\Users\Me\MySolution\MyProject\Program.cs(15): warning : CA1804 : Microsoft.Performance : 'Foo<T>.SomeMethod()' declares a variable, 'z', of type 'int', which is never used or is only assigned to. Use this variable or remove it.
6>MSBUILD : warning : CF1001 : CustomRules.ThreadSafety : The public Public Field "Tests.Program.Foo" must be preceded of readonly
Run Code Online (Sandbox Code Playgroud)
以下是我的规则的XML文件中的规则声明:
<?xml version="1.0" encoding="utf-8" ?>
<Rules …Run Code Online (Sandbox Code Playgroud) 将我们的解决方案升级到Visual Studio 2012后,我们希望利用新的代码分析功能.但是,运行时间太长,因为它在运行之前正在重建项目和依赖项目,即使代码没有更改也不需要重建.
如果不需要重建,有没有办法阻止它重建代码?
Visual Studio 2013是否具有显示未使用功能的功能?
删除这些功能的最佳解决方案是什么?
很久以前我收到了ISTQB认证,我记得它有以下区别: -
静态分析:对源代码执行,检测无法访问的代码,未分配的值等. -
动态分析:可以检测内存泄漏等,需要执行(分析).
但是当我今天搜索时,我可以看到各种网站和提到静态分析的来源也能够检测到内存泄漏.
所以我想知道,静态分析真的有能力吗?如果是这样,那么就结果而言,动态分析之间有什么不同?
So this code triggers CA1031.
try
{
// logic
}
catch (FileNotFoundException) // exception type
{
// handle error
}
Run Code Online (Sandbox Code Playgroud)
While this one does not:
try
{
// logic
}
catch (FileNotFoundException ex) // exception var
{
// handle error
}
Run Code Online (Sandbox Code Playgroud)
Because the exception type is meaningful, I don't need the ex in the first example. But it's not a a general exception type. It's not IOException or Exception. So why does it still trigger the CA1031? …
code-analysis ×10
.net ×4
c# ×3
dispose ×1
fxcop ×1
localization ×1
memory-leaks ×1
stylecop ×1
testing ×1