CodeSmith绿色化的情况下,又能使之正常工作

来源:互联网 发布:ubuntu如何卸载qq 编辑:程序博客网 时间:2024/04/30 23:07

最近,完成的工作中,需要使用CodeSmith生成代码。


我的思路是这样的:


1. 用户的参数,写入在CSP文件中。

2. 括展了CSP文件,因为这个文件是CodeSmith的项目文件,里面存着生成代码时的所有信息。而且是XML格式的,所以,可以对之进行扩展。

3. 然后,调用CodeSmith API,通过CSP来生成目标代码。我现在的的目标代码,是一个perl脚本程序的变量部分。


然而,在部署时,遇到一系列困难。


首先,因为我的Codesmith并不是正版的,所以在网上找了Codesmith.Engine的动态库。

而工作环境,需要绿色化。我一直没找到门道,一开始是装好CodeSmith后,然后把Crack的dll拷到这:C:\WINDOWS\assembly\GAC_MSIL\CodeSmith.Engine\5.0.0.0__9fd61cdb91609a7a

,over wirte 原有的。然后把这个目录只读。因为Codesmith启动时会检查。

这样,也实出了,程序和软件都可以使用。


但这种方式,经过反复尝试,证实,几乎无法部署到别的机器上去。


所以,我想到了彻底绿色化。


以过一番功夫,的确做到了。现在,我的CodeSmith在没有安装的机器上,也可以启动。


然而,新的问题出现了:如果目录更换,代码无法生成。


这里到了本文的重点。


========================================================================

1. 我的程序的代码如下:

ProjectCodeGenerator myGen = new ProjectCodeGenerator();                return myGen.GenerateCode(cspPath);

如果目录变更后,这段代码将无法执行。

2. 但我发现,手工启动CodeSmith后,并且在这个对话框里点是,就可以正确生成了:


3. 所以,我分析了注册表。

发现这里有不同:

已改变值 (10) 快照 A[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Map\DefaultIcon]@="E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmithResources.dll,8"@="E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmithResources.dll,8"[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Map\Shell\edit\command]@="\"E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmith.exe\" /edit \"%1\""@="\"E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmith.exe\" /edit \"%1\""[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Project\DefaultIcon]@="E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmithResources.dll,7"@="E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmithResources.dll,7"[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Project\Shell\add\command]@="\"E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmith.exe\" /add \"%1\""@="\"E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmith.exe\" /add \"%1\""[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Project\Shell\generate\command]@="\"E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmith.exe\" /generate \"%1\""@="\"E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmith.exe\" /generate \"%1\""[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Project\Shell\manage\command]@="\"E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmith.exe\" /manage \"%1\""@="\"E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmith.exe\" /manage \"%1\""[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Template\DefaultIcon]@="E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmithResources.dll,2"@="E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmithResources.dll,2"[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Template\Shell\edit\command]@="\"E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmithStudio.exe\" \"%1\""@="\"E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmithStudio.exe\" \"%1\""[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CodeSmith.Template\Shell\execute\command]@="\"E:\\work2\\AutoPack\\07_MyParser_New\\out\\debug\\bin\\CodeSmith.exe\" \"%1\""@="\"E:\\work2\\AutoPack\\07_MyParser\\out\\debug\\bin\\CodeSmith.exe\" \"%1\""


4. 这里我面临选择:是自己写代码来搞定注册表的关联信息的注入,还是利用CodeSmith的本身的功能来解决。

当然,Codesmith是首选,但他的手册里,很可能没用。

怎么办?

5. 用ILSpy_Debugger打开程序CodeSmthStudio

6. 在代码中搜索:

竟然找到了:



7. 剩下的就好办了:

改成这样就可以了:

                if (!FileAssociationManager.IsAssociated)
                {
                    FileAssociationManager.AddFileAssociation();
                }
                ProjectCodeGenerator myGen = new ProjectCodeGenerator();
                return myGen.GenerateCode(cspPath);


~~~~~~~~~~~~~~~~~~~~~~~~~~~


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 月经弄脏了床单怎么办 半夜到深圳机场怎么办 统计局来公司查怎么办 双离合严重堵车怎么办 健身俱乐部会员要退私教怎么办 感冒做剧烈运动怎么办 雪乐山滑雪怎么办卡 吉林省社保漏保怎么办 时时彩账户冻结怎么办 半夜到天津机场怎么办 小孩吃了避孕药怎么办 太阳能手表停了怎么办 太阳伞架坏了怎么办 通州自行车闪退怎么办? 台球厅生意不好怎么办 被水母咬了怎么办 被告不收判决书怎么办 律师完不成创收怎么办 保险业务员欺骗客户怎么办 德州扑克一样大怎么办 天气热没有空调怎么办 毕业证相片掉了怎么办 环世界肠道蠕虫怎么办 驾校时间过期了怎么办 过度劳累手疼怎么办 工商年检做错了怎么办 工商年检数字证书过期怎么办 工商年检过了怎么办 工商忘了年检怎么办 营业执照年检过期了怎么办 个体户营业执照没年检怎么办 工商执照没有年检怎么办 工商执照未年检怎么办 货车过期未年检怎么办 银吉姆健身卡怎么办 工大集团破产怎么办 哈尔滨摩托车棋牌证怎么办 喝鸽子汤回奶了怎么办 验车晚了一个月怎么办 太难找销路了怎么办 爆炒鸽子肉硬怎么办