知识大全 C#代码文件生成扩展代码文件的想法

Posted 文件

篇首语:你最愿意做的那件事,才是你真正的天赋所在。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#代码文件生成扩展代码文件的想法相关的知识,希望对你有一定的参考价值。

C#代码文件生成扩展代码文件的想法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  看到这标题的朋友可能搞不懂到底在搞什么 不过不要紧有兴趣的朋友可以先了解一下IVsSingleFileGenerator到底是用来做什么用的《实现自定义的VsSingleFileGenerator 》;在里提供一个IVsSingleFileGenerator接口可以方便地为项目文件生成附属文件 如刚才那文章提到的根据XML文件自动生成一个附属的C#代码文件;当然这个IVsSingleFileGenerator并不只是针对XML文件 可以是随便为任何项目文件生成附属文件你只要在文件属性中设置相关Custom Tools就可以了

      为什么在这里我提出在代码文件的基础上再生相关的代码附属文件呢 为什么不直接在原代码文件写完整就可以了;原因很简单因为手写代码是没有电脑来得快 最主要一个原因是基于XML的IVsSingleFileGenerator在某方面不好所以才采用基于代码文件的方式作为代码描述模板 用XML描述在现情况碰到的问题 在我的数据持久层里是采用XML结合IVsSingleFileGenerator来生成相关实体类的

  内容大概如下:<SmarkDatamodels xmlns=  >

  <Class Name= Customer  Table= vp_Customer >

  <ID Name= CustomerID  Type= System Int />

  <Property Name= UserName  Type= System String  Comment= 用户名 />

  <Property Name= UserPWD  Type= System String  Comment= 用户密码 />

  <Property Name= CustomerType  Type= System Int  Comment= 客户类型 />

  <Property Name= CustomerName  Type= System String  Comment= 自定义名 />

  <Property Name= Sex  Type= System Boolean  Comment= 性别 />

  <Property Name= Region  Type= System String  Comment= 地区 />

  <Property Name= City  Type= System String  Comment= 城市 />

  <Property Name= IDCard  Type= System String  Comment= 身份证号 />

  <Property Name= EMail  Type= System String  Comment= 电子邮件 />

  <Property Name= Phone  Type= System String  Comment= 电话 />

  </Class>

  </SmarkDatamodels>VsSingleFileGenerator会根据XML生成以下相关实体:        /// <summary>

  /// 用户名

  /// </summary>

  public virtual string UserName 

  get 

  return this mUserName;

  

  set 

  this mUserName = value;

  this EntityState FieldChange( UserName );

  

  

  

  /// <summary>

  /// 用户密码

  /// </summary>

  public virtual string UserPWD 

  get 

  return this mUserPWD;

  

  set 

  this mUserPWD = value;

  this EntityState FieldChange( UserPWD );

  

  

  

  /// <summary>

  /// 客户类型

  /// </summary>

  public virtual int CustomerType 

  get 

  return this mCustomerType;

  

  set 

  this mCustomerType = value;

  this EntityState FieldChange( CustomerType );

  

  VsSingleFileGenerator有个不好的地方就是当主文件修改后会重新生成附属文件 这样就导致你无法修改代码文件 如果想为某些属性成员添加Attribute来处理一些功能基本是没办法的

  如添加成员数据验证:

  [NotNull]

  [Length( 用户名长度必须在 个字符内! )]

  public string UserName

  

  get;

  set;

  

  即使能解决VsSingleFileGenerator生成附属文件冲突问题;但也要面对另一个问题 就如何扩展XML来处理这些扩展呢 添加XMLSchema扩展描述规则 重写VsSingleFileGenerator代码生成部份;这样下来没多久我估计自己会疯了

  实际情况添加不同Attribute来扩展辅助功能是很常见的事情 就一个验证来说根据实际

  情况就有很多情况 类构造方式也不一样 就针对这些情况来扩展XMLSchema和重写VsSingleFileGenerator带来的工作量就不用说了 还有一个问题就是XML并不能提供类型编译的保证这样对XML的质量是很难保证

    

  经过了一段时间的思考发现为什么不直接用代码作为原模板呢 这样就能得到IDE的支持 强在编译器的支持下保证类型输入规则的有效性 以下是本人实现的简单生成模型:

  [Table]

  interface IUser

  

  [ID]

  string UserName  get; set; 

  string BirthDate  get; set;  

  string Region  get; set; 

  string Remark  get; set; 

  

  生成的相关代码

  [Table]

  [Serializable]

  public class User:Smark Data Mappings DataObject

  

  [ID]

  public string UserName  get return mUserName; setmUserName=value;EntityState FieldChange( UserName ); 

  

  private string mUserName;

  

  public static Smark Data FieldInfo userName = new Smark Data FieldInfo( User UserName );

  

  public string BirthDate  get return mBirthDate; setmBirthDate=value;EntityState FieldChange( BirthDate );  

  

  private string mBirthDate;

  

  public string Region  get return mRegion; setmRegion=value;EntityState FieldChange( Region ); 

  

  private string mRegion;

  

  public string Remark  get return mRemark; setmRemark=value;EntityState FieldChange( Remark ); 

  

  private string mRemark;

  

  

  

  

  这样的话即使我们如何给属性添加Attribute都不会带来代码上的修改 VsSingleFileGenerator只对属性作一个模板生成其他内容搬过来就可以了:)

  WPS的排版真是没有WORD的好 估计我不会用

cha138/Article/program/net/201311/12403

相关参考

知识大全 C#实现按日期命名上传文件代码

C#实现按日期命名上传文件代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 php 批量生成html,txt文件的实现代码

  首先建立一个connphp的文件用来链接数据库复制代码代码如下:<?php$link=mysql_connect("mysql_host""mysql_user""mysql_passwor

知识大全 javascript中可以直接写php代码

  一在javascript中嵌入php代码  javascript若是通过js文件包含进来的那么js文件中也可以直接写php代码只不过包含js文件是扩展名要改成php如  <scripther

知识大全 在C#中如何读取配置文件[3]

在C#中如何读取配置文件[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!通过上面的代码我们可以

知识大全 读取扩展名为xml的资源文件的方法

    今天重构代码时想把如下xml文件嵌入程序集中在运行时读取    <?xmlversion=encoding

知识大全 asp FSO 读写文件本文件实现代码

aspFSO读写文件本文件实现代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  asp己经过时

知识大全 PHP文件上传代码用法

PHP文件上传代码用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  php文件上传代码编写过程

知识大全 三种php删除文件代码

下面我收藏了三php删除文件哦他可以利用unlink删除任何可删除的文件本程序要删除文件图片压缩文件等我们利用了几种方法来实例下面我收藏了三php教程删除文件哦他可以利用unlink删除任何可删除的文

知识大全 c#在线升级

  面介绍一种用WebServices制作的升级程序通过WebServices升级程序就象读写本机文件一样简单所以我就直接给出代码  WebServices部分代码   

知识大全 bat自动删除指定文件夹下前几天的文件的代码

  复制代码代码如下:运行的时候去掉最后一个@echo和pause这两个为测试输出用的dateadd(d%d%)这里改变删除时间注意一定要改区域语言里的时间格式为yyyymmddcha138