如何锁定一个.net,DLL

重新回到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换成破解后的,第二步把这个系统目录改成只读的。

然后真的可以了。

如何锁定一个.net,DLL_第1张图片


你可能感兴趣的:(CodeSmitch)