`
isiqi
  • 浏览: 16052581 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

.Net MF V4.0开源前的代码整理

阅读更多

已经有好长一段时间没有更新博客了,一是去美国总部和台湾出差用了不少时间,二是做.Net MF代码整理又花了近一个月的时间。不过令人欣慰的是,目前.Net MF V4.0的相关代码整理已经告一段落,就等着下一步的开源了。

代码整理的目标分两部分,一是非托管代码(主要是和驱动相关的C++代码),二是托管代码(主要是.Net Micro Framework库);代码整理的步骤也分为两步,一是静态整理,目的是去除不当的注释和多余未用的代码,二是动态修改,主要更注重的是代码结构上的改进和运行性能上的提高,对非托管代码,由于没有合适的工具这步只能作罢,对托管代码就需要用Fxcop进行检测了。

Fxcop据说是个好东东,我们用的是最新的1.36版本,一检查.Net Micro Framework库,7500多个问题,哇!全部修改完估计3个月也搞不定,后来同样检测桌面版的.Net Framework V2.0的库,问题差不多,所以就放心了,看来Fxcop的规则,在微软内部来说也不是绝对的权威,不过细研究Fxcop的规则,发现真的蛮好,对提高自己的托管代码的编写质量还是有很大帮助的。

符合全部的规则是不可能的了,最后经过一番商讨,选取了如下规则(不过后来证明我们还是错了,有些规则不该加上来,不仅增加了我们的工作量,并且我们的修改,总部方面还极不满意,甚而几个主要的dll,由他们接手修改了,不过从另一个侧面可以看出,他们还是比较重视开源后的代码质量的)。


mf

一、DesignRules(设计规则)

01】、Abstract types should not have constructors(抽象类型不应具有构造函数)

02】、Declare types in namespaces(在命名空间中声明类型)

03】、Define accessors for attribute arguments(定义属性参数的访问器)

04】、Do not declare protected members in sealed types(不要在密封类型中声明受保护的成员)

05】、DoNotDeclareVirtualMembersInSealedTypes(不要在密封类型中声明虚拟成员)

06】、DoNotHideBaseClassMethods(不要隐藏基类方法)

07】、DoNotOverloadOperatorEqualsOnReferenceTypes(不要对引用类型重载等号运算符)

08】、Exceptions should be public(异常应该是公共的)

09】、Implement IDisposable correctly(正确实现 IDisposable

10】、Implement standard exception constructors(实现标准异常构造函数)

11】、IndexersShouldNotBeMultidimensional(索引器不应是多维的)

12】、MarkAttributesWithAttributeUsage(用 AttributeUsageAttribute 标记属性)

13】、Mark enums with FlagsAttribute(用 FlagsAttribute 标记枚举)

14】、MembersShouldNotExposeCertainConcreteTypes(成员不应公开某些具体类型)

15】、OverloadOperatorEqualsOnOverloadingAddAndSubtract(重载加运算符和减运算符时应重载相等运算符)

16】、PropertiesShouldNotBeWriteOnly(属性不应是只写的)

17】、ProvideObsoleteAttributeMessage(提供 ObsoleteAttribute 消息)

18】、ReplaceRepetitiveArgumentsWithParamsArray(用参数数组替换重复的变量)

19】、Static holder types should be sealed(应密封静态容器类型)

20】、Static holder types should not have constructors(静态容器类型不应具有构造函数)

21】、StringUriOverloadsCallSystemUriOverloads(字符串 URI 重载调用 System.Uri 重载)

22】、Types should not extend certain base types(类型不应扩展某些基类型)

23】、Types that own disposable fields should be disposable(具有可释放字段的类型应该是可释放的)

24】、Types that own native resources should be disposable(拥有本机资源的类型应是可释放的)

25】、UriParametersShouldNotBeStringsURI 参数不应为字符串)

26】、UriPropertiesShouldNotBeStringsURI 属性不应是字符串)

27】、ValidateArgumentsOfPublicMethods(验证公共方法的参数)

二、Globalization Rules (全球化规则)

三、Interoperability Rules (互操作规则)

四、Naming Rules(命名规则)

01】、EventsShouldNotHaveBeforeOrAfterPrefix(事件不应具有 before after 前缀)

02】、IdentifiersShouldDifferByMoreThanCase(标识符不应仅以大小写进行区分)

03】、IdentifiersShouldHaveCorrectSuffix(标识符应具有正确的后缀)

04】、IdentifiersShouldNotHaveIncorrectPrefix(标识符应采用正确的前缀)

05】、IdentifiersShouldNotHaveIncorrectSuffix(标识符应采用正确的后缀)

06】、OnlyFlagsEnumsShouldHavePluralNames(只有 FlagsAttribute 枚举应采用复数形式的名称)

07】、Parameter names should match base declaration(参数名应与基方法中的声明保持一致)

08】、Parameter names should not match member names(参数名不应与成员名冲突)

09】、Type names should not match namespaces(类型名不应与命名空间冲突)

五、Performance Rules(性能规则)

01】、AvoidExcessiveLocals(避免过多的局部变量)

02】、Avoid uncalled private code(避免使用未调用的私有代码)

03】、Avoid unused private fields(避免未使用的私有字段)

04】、Do not cast unnecessarily(避免进行不必要的强制转换)

05】、Do not initialize unnecessarily(避免进行不必要的初始化)

06】、Remove empty finalizers(移除空的终结器)

07】、RemoveUnusedLocals(移除未使用的局部变量)

08】、Test for empty strings using string length(使用字符串长度测试是否有空字符串)

六、Portability Rules(可移植性规则)

七、Security Rules(安全规则)

01】、Array fields should not be read only(数组字段不应为只读)

02】、CatchNonClsCompliantExceptionsInGeneralHandlers(在常规处理程序中捕捉非 CLSCompliant 异常)

03】、MethodSecurityShouldBeASupersetOfType(方法安全性应是类型安全性的超集)

04】、ReviewDeclarativeSecurityOnValueTypes(检查有关值类型的声明性安全)

05】、ReviewVisibleEventHandlers(检查可见的事件处理程序)

06】、SealMethodsThatSatisfyPrivateInterfaces(密封满足私有接口的方法)

07】、Secured types should not expose fields(受保护的类型不应公开字段)

08】、StaticConstructorsShouldBePrivate(静态构造函数应为私有)

09】、WrapVulnerableFinallyClausesInOuterTry(在外部 try 块中包装易受攻击的 finally 子句)

八、Usage Rules(用法规则)

01】、AttributeStringLiteralsShouldParseCorrectly(应正确分析属性字符串文本)

02】、Call GC.SuppressFinalize correctly(正确调用 GC.SuppressFinalize

03】、Collection properties should be read only(集合属性应该是只读的)

04】、Disposable fields should be disposed(应释放可释放的字段)

05】、DisposableTypesShouldDeclareFinalizer(可释放类型应声明终结器)

06】、Do not call overridable methods in constructors(不要在构造函数中调用可重写的方法)

07】、DoNotDecreaseInheritedMemberVisibility(不要降低继承成员的可见性)

08】、Do not ignore method results(不要忽略方法结果)

09】、Do not mark enums with FlagsAttribute(不要使用 FlagsAttribute 标记枚举)

10】、DoNotShipUnreleasedResourceFormats(不要发行未发布的资源格式)

11】、FinalizersShouldBeProtected(终结器应受到保护)

12】、Finalizers should call base class finalizer(终结器应调用基类的终结器)

13】、Initialize value type static fields inline(初始化内联值类型的静态字段)

14】、MarkWindowsFormsEntryPointsWithStaThread(使用 STAThread 标记 Windows 窗体的入口点)

15】、MembersShouldDifferByMoreThanReturnType(成员不应只是返回类型不同)

16】、NonConstantFieldsShouldNotBeVisible(非常数字段不应该是可见的)

17】、Operations should not overflow(运算不应溢出)

18】、OperatorsShouldHaveSymmetricalOverloads(运算符应有对称重载)

19】、PassSystemUriObjectsInsteadOfStrings(传递 System.Uri 对象而不是字符串)

20】、TestForNaNCorrectly(正确测试 NaN)

从反馈的结果来看,应该是对我们(主要指我修改的那部分代码)删除未使用的私有变量颇有微词,看来这些变量也许是为未来升级做准备的。此外有一些地方的私有变量其存在的意义待考(总部方面似乎不愿解答这个疑问,是解答起来太繁琐?还是非常简单而近于不屑解答?未知),代码如下,开源后,也望一些深入研究的达人能告知。

public sealed class Bitmap : MarshalByRefObject, IDisposable

{

private object m_bitmap; <-- 这个地方搞不明白,其存在的意义是?

[MethodImplAttribute(MethodImplOptions.InternalCall)]

extern public Bitmap(int width, int height);

[MethodImplAttribute(MethodImplOptions.InternalCall)]

extern public Bitmap(byte[] imageData, BitmapImageType type);

[MethodImplAttribute(MethodImplOptions.InternalCall)]

extern public void Flush();

... //余下都是Interop接口,没有什么内部函数用到m_bitmap

}

此外.Net MF的编辑器不会为没有构造函数的类,自动添加一个public的构造函数的。

从上图可以看出,.Net MF V4.0还是比3.0增加了不少dll的,新版本不仅支持Http,还支持MicroBee,更多的新功能有待我们开源后更深入地去探索。

代码开源了,授权费也不要了,目前已经有很多企业对此表示了很大兴趣,也有的企业已经直接进入了合作阶段,相信随着时间的推移和MF的不断发展,嵌入式领域的.Net征程将走的更远。

附:Fxcop下载地址

http://www.microsoft.com/downloads/details.aspx?FamilyID=9aeaa970-f281-4fb0-aba1-d59d7ed09772&displaylang=en

分享到:
评论

相关推荐

    .Net MF 模拟器

    修改自Embedded Programming with the Microsoft .NET Micro Framework 的GPSMFEmulator

    .Net MF 模拟器 抓图

    源程序是 http://bansky.net/blog/2008/03/jpeg-camera-and-micro-framework/&lt;br&gt;原作者是在 Tahoe development board 实现的,这个不需要使用硬件,直接就可以通过模拟器抓取图像

    风讯FoosunCMS v4.0 SQL修改版

    本程序改自FoosunCMS普及版! 数据库已经改为mssql! 程序中还有不少需要改动的地方!望请高手继续完善! 数据库在:foosun_data/anhui163可以还原...修改mssql数据库连接在:FS_InterFace/MF_Function.asp文件中修改

    .archroboBASIC MF v2.80.msi

    .archroboBASIC MF v2.80.msi

    MF卡协议分析 代码 如何用NFC读取 MF卡内容

    https://blog.csdn.net/dreams_deng/article/details/124735117 MF卡协议分析 博客

    MF00473-ASP.NET低代码开发平台源码.zip

    ASP.NET低代码开发平台源码 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发语言 : C# 数据库 : SQL2008 开发工具 : VS2012 源码类型 : WebForm 框架主要的特点就是实现最大程度的自动化,...

    Matlab 读取 MF4文件 代码

    1.该代码可用于标定或测试分析工作中,在测试结束,数据回灌时,可用于在matlab中读取MF4格式文件 2.读取之后,将MF4文件中包含的信号以及对应的数据返回到data结构体中,供后续使用。后期需要使用MF4文件中信号的,...

    Smart2440 LPC2478

    这个是周立功的开发板 2440 LPC2478 Smart2440 .net mF MicroFrameworkPK_v4_1 mdk 3.9a 这是自己移植.net mF MicroFrameworkPK .net mF MicroFrameworkPK_v4_1开发包

    omnet 4.0 及MF模块的安装手册

    OMNET++4.0 和MF模块安装的详细说明

    MF00538-ASP.NET年会抽奖程序源码.zip

    ASP.NET公司年会抽奖程序源码 开发语言 : C# 数据库 : Access 开发工具 : VS2013 源码类型 : WebForm 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 联欢会抽奖程序(含完整源代码),支持同时抽取...

    MF00639-.NET Core前后端分离快速开发框架.zip

    .NET Core前后端分离快速开发框架源码(Core.3.1+AntdVue) 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发环境: 操作系统:Windows 10 后端开发工具:Visual Studio 2019+ 前端开发工具:...

    25175客户管理系统(asp.net) v1.0.1 beta.rar

    功能简介: 1信息录入(新的项目,新增程序员,新增客户,新增负责人,新增项目类型,项目功能扩展,新增项目款项,款项结算,项目新增程序员) 1.1新的项目(项目类型,项目开发日期,开发周期,项目到期时间,项目名称,需求...

    OMNet4.0和MF的安装.doc

    omnet4.0和MF的安装,以及中间注意的问题

    MF00512-ASP.NET房屋所有权证书打印源码.zip

    ASP.NET房屋所有权证书打印系统源码 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发语言 : C# 数据库 : 其他 ...1、开发环境为Visual Studio 2010,数据库为SQLite,使用.net 4.0开发

    【源码编号 : MF00035】ASP.NET云架构 BPM流程管理系统源码

    操作系统:Windows Server 2003 及以上;...需要安装.Net Framework 4.0及以上; 数据库:SQL Server 2005及以上版本或Oracle 11g及以上版本。 IE10.0及以上、Chrome(推荐)、Fixfox、Safari等主流浏览器;

    MF00970-ASP.NET用户权限系统源码.zip

    开发环境:VS2010+Access .net4.0 (1)通用的用户权限系统,可以创建用户、角色、模块、角色模块、用户角色,  构建成自定久系统功能菜单,当前系统支持二级层级菜单 (2)系统共用五张表,有用户表、模块表、角色...

    imBMW:BMW iBus .NET MF SDK和硬件

    是.NET Micro Framework和硬件项目。 它开始为具有界面的汽车添加自定义功能,例如'91 -'10宝马以及Mini,Land Rover,Rover,MG和Rolls Royce的某些型号。 使用FEZ Mini的imBMW V1设备通过耳机电缆将iPod连接到...

    MF00702-ASP.NET标签打印源码.zip

    ASP.NET标签打印源码 开发语言 : C# 数据库 : Access 开发工具 : VS2008 源码类型 : WinForm 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 一、源码描述 这是一款比较实用的打印源码,可以用于...

    MF00746-ASP.NET汽车4S店网站源码.zip

    ASP.NET汽车4S店网站源码 注意:不带技术支持,有...1、开发环境为Visual Studio 2010,数据库为access,使用.net 4.0开发。   2、管理员登陆名密码均为:admin   3、默认数据库连接字符串在webconfig配置文件中修改

    MF00666-asp.net移动电源公司网站源码.zip

    asp.net移动电源公司网站源码 ...1、开发环境为Visual Studio 2010及以上版本,数据库为ACCESS,使用.net 4.0开发。 2、管理员登陆名为:admin,密码:admin88 五、配置说明 配置环境,请选择net4.0,经典模式即可。

Global site tag (gtag.js) - Google Analytics