谦卑的程序员






         静水流深

December 23, 2008

CodeSmith的System.TypeLoadException错误

Filed under: T.兵器谱 — Eric Tou @ 6:00 pm
Tags: ,

环境
CodeSmith Professional 5.0.3 Revision 5757
Microsoft .Net Framework 2.0

  最近开始认真地折腾CodeSmith,在非常起始的阶段,为数据库的Table按照模板生成代码时遇到问题,对于初学者来说真是非常挫折。过程如下:

1.在Schema Explorer中创建数据库连接

codesmith_schema_explorer

2.在Template Explorer中选择要使用的模板。
 比如TableProperties,它可以为Table生成包含相应属性的类

codesmith_template_explorer

3.设置模板的参数
在此处填入要生成代码的Table名称,点击Generate,即可自动生成代码。

codesmith_tableproperties

  然而事情并不一番风顺,CodeSmith提示

System.TypeLoadException:
  Could not load type ‘System.DateTimeOffset’
  from assembly ‘mscorlib, Version=2.0.0.0, Culture=neutral,
  PublicKeyToken=b77a5c561934e089′.

  经过测试,在其他的数据库相关的模板中也出现以上错误。经过SQL Server 2000、SQL Server 2005 Express、Access 2003的测试和错误重现,也排除了因为数据库平台的原因。

  祭出google搜索,关键字CodeSmith + System.TypeLoadException,返回的结果不多,在CodeSmith Community中的一篇<Error when trying to run NetTiers in CodeSmith v5>提到了相似的问题。
  System.DateTimeOffset是.Net 3.5支持的新数据类型,CodeSmith 5.0支持.Net 2.0 3.0 3.5,但是似乎版本的兼容有些问题。我用的可是2.0。
  翻到第二页,发现解决的方法是:安装Microsoft .Net Framework 2.0 Service Pack 1
  Framework是随Visual Studio一起装的,VS的SP1装了,Framework的没有。想当然以为VS的SP1就是Framework的SP1,乌龙事件,差点把这个正解漏过。下载,安装,再试,问题解决。

  这个问题,究其原因,也许是安装CodeSmith的时候环境要求漏看了。不过安装过程中也没有提示,出错也没什么提示,对于刚开始试用的初学者来说,还是很容易受打击的,希望之后的版本能改进吧。
  总得来说是一个小错误,分享一下免得有人再走弯路。

WPMU Theme pack by WPMU-DEV.