山寨一个很容易,规模不大的话,也不需要专门的id生成服务器,各台机器自行生成id就好了。
很详细的系列文章,解释了怎么在Asp.NetMVC中实现插件机制
原文在 ASP.NET MVC2 Plugin Architecture Tutorial Part
基本原理:1:实现自定义的VirtualPathProvider,从插件中加载资源,而不是从硬盘中搜索物理文件;2:实现自定义的ViewEngine。两者的基本原理在《Programming.Microsoft.ASP.NET.MVC》中解释的很详细。
ccnet自带的vsts插件解析tfs的变更集输出用的是下面的正则表达式
Regex parser = new Regex(@"Changeset:[ \t](?<changenumber>[0-9]*)\r\nUser:[ \t](?<author>.*)\r\nDate:[ \t](?<date>.*)\r\n\r\nComment:(?<comment>(?:\r\n.*)*)\r\n\r\nItems:(?<items>(?:\r\n.*)*)\r\n\r\n");
但实际上tfs中文版的输出是这样的
变更集:
用户:
日期:
注释:
项:
解析起来就出问题了。
补充:有的环境tf.exe的输出会出现乱码,这是因为cc.net把编码hardcode为utf8了,可以设置processInfo的StreamEncoding来修改默认编码格式,例如:
processInfo.StreamEncoding = Encoding.GetEncoding("gb2312");
ccnet 1.5发布一段时间了,今天将ccnet 1.44升级到了1.5
ccnet 1.5已经内置tfs插件,不用再另外下载ccnet.vsts.plugin.dll,升级时需要将这个插件删除,不然ccnet启动时会报错。
用ccnet内置的tfs插件访问tfs服务器会报权限错误,日志还可能有乱码,网上很多人问这个问题,最简单的方式是用有访问tfs权限的账户运行ccnet服务,并且将ccnet配置文件中配置的用户名密码去掉。另外一种方法是用ccnet 1.5新增的Impersonation配置节来模拟账号运行。
ccnet 1.5大大简化了dashboard的配置工作,原先需要修改dashboard.config来配置的功能现在通过Dashboard Administration管理工具来配置就可以了,之前各种reportplugin都可以从package列表中找到,鼠标点几下就能安装好,还有几种界面模板可以选择。
一DynamicProxy已经整合到核心类库。
API的提供方式大幅改变,可读性更好,看来自己的很多API接口也应该考虑采用类似的方式。
增加了debug工具
全面支持:.Net 4.0、Silverlight 4、.NET 4.0 Client Profile