重新回到Codesmith方向。
遇到一个难题:现在我需要调用CodeSmith.Engine.dll, 在代码中完成模板生成的过程。
目前的进度是这样的,我在网上找到一个示例,这个示例的方法是,调用
CodeTemplateCompiler compiler;
compiler = new CodeTemplateCompiler(property.Value.ToString() + @"\Entity.cst");
compiler.Compile();
if (compiler.Errors.Count == 0)
{
CodeTemplate template = compiler.CreateInstance();
DatabaseSchema schema = new DatabaseSchema(new SqlSchemaProvider(), "Server=" + this.cbServer.SelectedItem.ToString() + ";Database=" + this.dbName.SelectedItem.ToString() + ";uid=" + this.tbUserid.Text + ";pwd=" + this.tbPwd.Text);
TableSchema schema2 = schema.Tables[this.tbName.SelectedItem.ToString()];
template.SetProperty("NameSpace", property13.Value.ToString());
template.SetProperty("SourceTable", schema2);
template.RenderToFile(property2.Value.ToString() + @"\Entity\" + schema2.Name + ".cs", true);
}
,
然而,如果在一台干净的机器上,用破解后的DLL没有关系,但如果已安装了CodeSmith则不可以。
会说,你的CodeSmich50.lic里没有授权。
我猜想原因是这样的:我们安装的CodeSmith是profession version ,而这个破解的CodeSmith.Engine.dll,则来自于一个试用版,所以才出现这样的问题。
从output windows中找到:
'CodeGenerator.vshost.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\CodeSmith.Engine\5.0.0.0__9fd61cdb91609a7a\CodeSmith.Engine.dll'
那么也就是说,只要把这个dll换成我们程序用的那个就可以了。
这里面有两个问题,我到现在还没有换明白:
一个是,如果我们程序调用本地的CodeSmith.Engine.dll,本不会有事,但不明白,为什么一定要调用系统的?这是不是微软的bug?
第二个,'C:\WINDOWS\assembly\GAC_MSIL\CodeSmith.Engine\5.0.0.0__9fd61cdb91609a7a\CodeSmith.Engine.dl
你即使删除,也会被重建?
这个非常奇怪。
把,我的处理办法是,第一步,把这个dll换成破解后的,第二步把这个系统目录改成只读的。
然后真的可以了。