我在某个私人项目中使用了Castle 的 ActiveRecord.用起来那是真叫个爽,整个项目里楞是一句SQL语句都没有,嘿嘿。超级喜欢上了这个框架。直到有那么一次.....
我在 www.51aspnet.net 里申请了一个免费的空间,然后把我的大作传上去一看,噢,不!他直接给了个黄色的出错页面,说什么没有权限! 我再本地试,怎么都是好的。无奈之下google之,发现 web.config里有个叫 <trust level="???">的配置节,默认是完全权限,即full,但是当我将它设置为普通即 <trust level="medium" />时,错误来了!本地也出错了。
现在怎么办?看样子ActiveRecord不能在此空间使用。那让我数据库层全部重写?那不行,门也没有。于是,某菜鸟被逼无奈,只得引用Castle源代码,调试之,嘿嘿。这也算是本鸟第一hack开源框架哈哈,(以前的二次开发那不算),运气不错,不一会就跟到了,原来毛病在这里
Castle.ActiveRecordFrameworkInternalVisitorsXmlGenerationVisitor.cs 文件的1186行有这么一段:
代码语言:javascript复制/// <summary>
/// Create a valid name from a type, without including all the version and public key
/// information
/// </summary>
public static String MakeTypeName(Type type)
{
if (type == null) return null;
//return String.Format("{0}, {1}", type.FullName, type.Assembly.GetName().Name);
return String.Format("{0}, {1}", type.FullName, type.Assembly.FullName.Substring(0,type.Assembly.FullName.IndexOf(",") ) );
}
看来是反射类型名称时出现的权限错误。改成象我这样再编译一下,再上传虚拟主机,成功!哈哈,祝贺我的首次Hack大功告成