【发布时间】:2019-07-24 17:15:43
【问题描述】:
我正在为我正在编写的应用程序组合一个简单的(沙盒)模块系统,以便在锁定权限(File.IO 等)的同时允许加载和执行其他人(不受信任的代码)编写的“模块”最大限度地降低恶意代码的风险。
根据文章:How to: Run Partially Trusted Code in a Sandbox
在第 2 步:签署程序集:
StrongName fullTrustAssembly = typeof(Sandboxer).Assembly.Evidence.GetHostEvidence<StrongName>();
我收到以下错误:
System.ArgumentException: '在完整的信任程序集列表中发现空的 StrongName。'
进一步调查,果然fullTrustAssembly实际上是null,再深入一点.GetHostEvidence<StrongName>();是返回null的方法。
我在这里找到了一个解决方案(有效):A null strongname was found in the full trust assembly list sandbox application,看起来像:
StrongName fullTrustAssembly = new StrongName(
new StrongNamePublicKeyBlob(typeof(Sandboxer).Assembly.GetName().GetPublicKey()),
typeof(Sandboxer).Assembly.GetName().Name,
typeof(Sandboxer).Assembly.GetName().Version);
但是,提供该问题答案的人表示:
在 .net framework 4.0 之前,您无法通过调用 GetHostEvidence 获取 strongName。更改 .net 框架的版本。
我使用的是 .NET Framework 4.8,因此根据该声明和原始教程,GetHostEvidence() 应该可以工作。
1.为什么GetHostEvidence<StrongName>() 没有按照原始教程工作?
2。上述两种获取签名StrongName的不同方法的真正区别是什么?
奖励积分
Google 在我的项目的这个沙盒模块管理器部分中寻找当前的实现和教程来完成我的任务并不是我的朋友。是否有任何好的资源(除了 .NET 文档)可以更详细地了解它是如何工作的?我能找到的大部分都是过时的(10 岁以上)。是否有更多当前的策略来实现这一目标。 (注意:我已经查看了Managed Extensibility Framework (MEF) 并觉得这对于我正在从事的项目的另一个单独部分非常有用,但对于这部分来说似乎有点矫枉过正。我也看过System.Addin(MAF?)但我只能find 是与 Web/ASP 相关的信息,其中大部分也非常过时)
【问题讨论】:
标签: c# appdomain strongname