我正在创建一个将在沙盒环境中运行代码的应用程序。此环境应仅允许不受信任的代码处理明确指定的资源并返回已定义的数据类型。我正在使用本文中的主体来设置沙箱:
How to: Run Partially Trusted Code in a Sandbox
我还有一些需要在沙盒环境中运行的代码。不幸的是,当我尝试设置在沙箱中运行的类型时,我收到以下错误:
类型违反的继承安全规则:'MyTypeRunningInSandbox'。派生类型必须与基类型的安全可访问性匹配,或者不易访问。
我不确定为什么我会得到这个错误,因为基类型和派生类型都是由我创建的,并且它们都不应该比另一个更安全或更不安全。
我的应用程序结构(帮助您理解):
TypeLoader class
\
Trusted Sandbox Manager (i.e. sets up a the new sandbox)
\ (the error is happening in this class while creating the
| new app domain)
|
|Untrusted Sandbox Manager (i.e. runs the untrusted code)
如果您将我的解决方案与上面的Microsoft文章进行比较,我的代码将失败,相当于以下行:
ObjectHandle handle = Activator.CreateInstanceFrom(
newDomain, typeof(Sandboxer).Assembly.ManifestModule.FullyQualifiedName,
typeof(Sandboxer).FullName );
有关如何解决此问题的任何想法?
答案 0 :(得分:5)
我终于弄明白了。我需要更好地理解受信任的程序集和强名称的工作方式。问题是我的不受信任类型的基本类型位于一个程序集中,该程序集使用我之前设置为受信任的相同强名称密钥进行签名。当我将基类型移动到具有不同强名称键的新程序集时,它开始运行良好。现在看起来很明显,无法想象为什么我之前没有看到它。
感谢任何给予此考虑的人!