我想编写一个 MVC 应用程序,允许我们开发组中的某个人上传 .NET 程序集,然后我想反映 .dll 以从中收集信息。我想安全地做到这一点。从来没有在“沙箱”中加载过这样的程序集。正确的方法是什么?
问问题
538 次
1 回答
4
如果您只想检查元数据,那么您可以使用Assembly.ReflectionOnlyLoadFrom
. 使用此 API 加载程序集会加载程序集,但其中的代码均不可执行:
您不能从已加载到仅反射上下文的程序集中执行代码。要执行代码,请使用 LoadFile 方法加载程序集。
如果您需要能够卸载程序集,您可能希望在新的 AppDomain 中执行此操作。程序集无法卸载,但包含它们的 AppDomains 可以。
如果你需要执行一些代码,但又想确保库不会做坏事,你可以加载一个新的 AppDomain 并使用代码权限来限制 AppDomain。这篇 CodeProject 文章很好地介绍了如何做到这一点。
于 2013-01-11T16:09:26.070 回答