作为最佳实践,您是在调试和发布版本上运行代码分析,还是只运行其中一个?
另一个项目,Visual Studio的代码分析有这个选项.但我找不到StyleCop(AKA Source Analysis).
我想忽略的文件是dbml的.designer.cs代码,其中包含// <autogenerated>标记.一篇博文告诉我这样就足够了,但就我而言,事实并非如此.
我正在尝试对包含实体模型(edmx文件)的程序集运行代码分析.在项目属性中,我检查了"从生成的代码中抑制结果"选项,但是我仍然收到很多与自动生成的EF代码有关的CA错误.
有没有人经历过这个?是否有解决方法?
这是我试图理解的规则的解释.这是代码分析器抱怨的简化代码:
Public Class CustomerSpeed
Public Enum ProfitTypeEnum As Integer
NotSpecified = 0
FlatAmount = 1
PercentOfProfit = 2
End Enum
Private _ProfitTypeEnum As ProfitTypeEnum
Public Sub New(ByVal profitType As ProfitTypeEnum)
_ProfitTypeEnum = profitType
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
如果枚举仅适用于类,为什么在类中使它成为包含类型是一件坏事?似乎比我更整洁......
有谁知道以下行是什么意思?:
嵌套类型包括成员可访问性的概念,一些程序员不清楚这一概念
使用命名空间对类和枚举进行分组似乎不是解决此警告的有用方法,因为我希望枚举属于与类名相同的父级.
关于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不会在这里抱怨?
如本文所述, ReSharper的.sln.DotSettings文件仅包含那些值从默认值更改的设置.有没有办法将所有代码编辑和代码检查设置存储在团队共享层中,无论值是更改还是默认值?
我看到的唯一方法是更改每个值并将其切换回来(因此所有这些值最终都在.sln.DotSettings文件中),但这似乎是一项非常耗时的任务.
我试图避免的问题如下:
假设一个团队有两个开发人员,比如Jessika和John,他们认为Resharper默认使用下划线为私有字段添加前缀:
int _myPrivateField = 1;
Run Code Online (Sandbox Code Playgroud)
因此,他们不会更改"C#命名样式"部分下的" 实例字段(私有) "设置,并检入.sln.DotSettings文件.然而,当杰西卡检查她的家用笔记本电脑上的源代码时,Resharper仍然建议使用
int myPrivateField = 1;
Run Code Online (Sandbox Code Playgroud)
因为她的计算机的设置已更改为没有前缀,保存为" 保存到此计算机 ".如Resharper的文档中所述,如果"此计算机"图层具有设置值,而其他图层则不会应用该值(请参见此图中的中间绿色设置:http://blogs.jetbrains.com /dotnet/wp-content/uploads/2012/08/layers3.png
它并不重要,但我想弄清楚它告诉我什么,这是一个合理的警告吗?有人可以用简单的术语解释这个错误吗?
CA1001拥有一次性领域的类型应该是一次性的
在'MemVoteManager'上实现IDisposable,因为它创建了以下IDisposable类型的成员:'CongressDBEntities'.如果先前发布了"MemVoteManager",则将实现IDisposable的新成员添加到此类型将被视为对现有使用者的重大更改.
public class MemVoteManager : AbstractDataManager, IMemVoteManager
{
private CongressDBEntities context = new CongressDBEntities();
public int AddMemVote(tMemVoteScore mvs)
{
//Insert Model
context.tMemVoteScores.Add(mvs);
context.SaveChanges();
int newPK = mvs.MemVoteScoresID;
//Update funky column ID with PK as well
var memVoteItem = (from m in context.tMemVoteScores
where m.MemVoteScoresID == newPK
select m).SingleOrDefault();
memVoteItem.ID = memVoteItem.MemVoteScoresID;
context.SaveChanges();
return newPK;
}
Run Code Online (Sandbox Code Playgroud) 将我们的解决方案升级到Visual Studio 2012后,我们希望利用新的代码分析功能.但是,运行时间太长,因为它在运行之前正在重建项目和依赖项目,即使代码没有更改也不需要重建.
如果不需要重建,有没有办法阻止它重建代码?
很久以前我收到了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
c# ×3
.net ×2
dispose ×1
idisposable ×1
memory-leaks ×1
resharper ×1
stylecop ×1
testing ×1
vb.net ×1