CodeSmith的System.TypeLoadException错误
环境
CodeSmith Professional 5.0.3 Revision 5757
Microsoft .Net Framework 2.0
最近开始认真地折腾CodeSmith,在非常起始的阶段,为数据库的Table按照模板生成代码时遇到问题,对于初学者来说真是非常挫折。过程如下:
1.在Schema Explorer中创建数据库连接
2.在Template Explorer中选择要使用的模板。
比如TableProperties,它可以为Table生成包含相应属性的类
3.设置模板的参数
在此处填入要生成代码的Table名称,点击Generate,即可自动生成代码。
然而事情并不一番风顺,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的时候环境要求漏看了。不过安装过程中也没有提示,出错也没什么提示,对于刚开始试用的初学者来说,还是很容易受打击的,希望之后的版本能改进吧。
总得来说是一个小错误,分享一下免得有人再走弯路。