.net - 如何使用 Sandbox 在 .NET 中创建插件模型?

标签 .net assemblies plugins sandbox

有没有一种方法可以将 .NET 程序集加载到沙箱环境中,该沙箱环境也以自定义方式受到限制?我知道您可以在不同的 AppDomain 中运行程序集,但是您可以限制它执行您想限制的某些事情吗?

例如:我希望能够在 ASP.NET 应用程序的单独程序集中加载插件(简单,只是通过特定接口(interface)定义),但我只希望插件能够访问某些数据访问层组件,不能直接连接到任何数据库。我正在考虑让一个应用程序实例托管多个客户端数据的场景,我只希望插件能够访问当前登录的特定客户端/用户的数据。

有人对如何做到这一点有任何想法吗?

我在 SO 上发现了以下关于如何在沙箱中加载程序集的问题,但它没有谈论添加沙箱的任何自定义限制:

Loading Assemblies from a .Net Application in a 'Sandbox Environment'

更新:看起来你可以在调用“PermissionSet”时设置一个非常具体的“AppDomain.CreateDomain”,但我不确定我需要设置什么权限来允许/禁止指定的权限以上。 MSDN 上还有这篇文章:http://msdn.microsoft.com/en-us/library/bb763046.aspx

此外,我希望在 .NET 2.0/3.5 中执行此操作

除了使用 System.AddIn 之外,还有其他想法吗?

最佳答案

你可以使用 System.AddIn框架(在我看来对于更简单的任务来说有点复杂)或创建自定义 AppDomain,你需要什么权限(最小设置),你可以阅读 here

AddIn 框架是在 3.5 中添加的。此外,您可以通过谷歌搜索生成 stub 的可视化插件,这使得使用此解决方案变得更加容易。

关于.net - 如何使用 Sandbox 在 .NET 中创建插件模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197426/

相关文章:

Java - 动态加载类

c# - WCF 比运行相同代码的 WebAPI 慢得多

c# - OracleParameter.Size 有什么影响?

c# - 具有动态列和行的 DevExpress WPF GridControl

.net - 任何具有测试功能的 BNF IDE

c# - 使用 Razor/MVC3 将 AssemblyVersion 放入网页时出现问题

.NET - 如何判断 dll 是该 dll 的 32 位版本还是 64 位版本

java - Eclipse 插件 : menu button greyed out

plugins - 跨浏览器插件框架的比较

.net - 说, "Assembly successfully added to the cache"但它不在缓存中