一位朋友在他的计算机上本地使用 NHibernate 制作了一个 ASP.NET 网站,并在我从 SVN 存储库下载它之后在我的计算机上使用它。但是,我们正在尝试将其托管在具有中等信任级别的共享托管环境中。服务器给出以下异常(部分堆栈跟踪):
[SecurityException: Request for the permission of type 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark) +31
System.Security.CodeAccessPermission.Demand() +46
System.Reflection.Emit.DynamicMethod.PerformSecurityCheck(Type owner, StackCrawlMark& stackMark, Boolean skipVisibility) +166
System.Reflection.Emit.DynamicMethod..ctor(String name, Type returnType, Type[] parameterTypes, Type owner, Boolean skipVisibility) +40
NHibernate.Bytecode.Lightweight.ReflectionOptimizer.CreateDynamicMethod(Type returnType, Type[] argumentTypes) in ReflectionOptimizer.cs:104
与反思有关。NHforge.org 上有一个指南,告诉您关闭反射优化器。我找不到如何做到这一点,但我怀疑你根本无法在 VS2010的ASP.NET 网站中做到这一点。SO 上的其他人建议首先将其转换为ASP.NET Web 应用程序,您可以在其中对程序集引用进行更多控制。
问题是网站(这是一个学校项目)的截止日期已经是下周五了。我们还没有学习任何类型的 ORM,但我们希望它可以为我们节省大量时间。我想提出3个问题:
鉴于例外情况以及它是具有中等信任度的共享主机这一事实,我们是否可能让 NHibernate 在相当长的时间内工作?
我们如何将我们的网站转换为 Web 应用程序?
我们还需要采取哪些进一步的措施?
我知道实际上不允许一次问多个问题,但这些问题非常相关,我觉得所有问题都有一个答案。
任何帮助表示赞赏。如果您需要完整的堆栈跟踪,我会发布它。