知识大全 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#实现按日期命名上传文件代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  
首先建立一个connphp的文件用来链接数据库复制代码代码如下:<?php$link=mysql_connect("mysql_host""mysql_user""mysql_passwor
一在javascript中嵌入php代码 javascript若是通过js文件包含进来的那么js文件中也可以直接写php代码只不过包含js文件是扩展名要改成php如 <scripther
在C#中如何读取配置文件[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!通过上面的代码我们可以
今天重构代码时想把如下xml文件嵌入程序集中在运行时读取 <?xmlversion=encoding
aspFSO读写文件本文件实现代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! asp己经过时
PHP文件上传代码用法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! php文件上传代码编写过程
下面我收藏了三php删除文件哦他可以利用unlink删除任何可删除的文件本程序要删除文件图片压缩文件等我们利用了几种方法来实例下面我收藏了三php教程删除文件哦他可以利用unlink删除任何可删除的文
面介绍一种用WebServices制作的升级程序通过WebServices升级程序就象读写本机文件一样简单所以我就直接给出代码 WebServices部分代码
复制代码代码如下:运行的时候去掉最后一个@echo和pause这两个为测试输出用的dateadd(d%d%)这里改变删除时间注意一定要改区域语言里的时间格式为yyyymmddcha138