5

RazorEngine を使用しています。実行時にビューモデルにバインドする動的テンプレートがいくつかあります。私の要件は、サンドボックスでコードを実行することです。したがって、バインディングのみが許可されます。RazorEngine を使用すると、任意のアプリ ドメインでコードを実行できます。

using (var service = new IsolatedTemplateService(() => appDomain))
{
   return service.Parse(newTemplate, model, null, null);
}

次のアクセス許可で app-domain を実行すると、動作します。

var permissionSet = new PermissionSet(PermissionState.Unrestricted);

しかし、これらの権限を使用して実行すると、

var permissionSet = new PermissionSet(PermissionState.None);
permissionSet.AddPermission(new SecurityPermission(PermissionState.Unrestricted));
permissionSet.AddPermission(new ReflectionPermission(PermissionState.Unrestricted));

私は手に入れます、

[SecurityException: Request failed.]
   System.AppDomain.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +0
   RazorEngine.Templating.IsolatedTemplateService..ctor(Language language, Encoding encoding, IAppDomainFactory appDomainFactory) +408
   RazorEngine.Templating.IsolatedTemplateService..ctor(Language language, Encoding encoding, Func`1 appDomainFactory) +73
   RazorEngine.Templating.IsolatedTemplateService..ctor(Func`1 appDomainFactory) +41

付与する必要がある特別な許可はありますか?

4

2 に答える 2

1

残念ながら、CodeDOM API (Razor コンパイラが生成する構文ツリーから C# コードを生成するために RazorEngine が使用するものと思われます) には、完全な信頼が必要です。完全な信頼を得るために、アセンブリに厳密な名前を付けてGACする以外にできることは何もありません。残念ながら、「FullTrust」パーミッション セット全体を要求するため、特定のパーミッションのみを付与することはできません。

于 2014-01-14T23:15:53.277 に答える