【问题标题】:legacyCasModel="true" and dynamic data/operationslegacyCasModel="true" 和动态数据/操作
【发布时间】:2011-07-29 07:23:57
【问题描述】:

这类似于Odd Exception in MVC 3 Project

我们有一个完全信任运行的 ASP.NET 4.0 应用程序。我们需要在 web.config 中有以下行,否则我们正在使用的库之一不起作用。 (因为它明确使用了以前版本的 .NET 中现已过时的 CAS 模型)。

<trust legacyCasModel="true" />

鉴于此设置,我们无法使用动态关键字或依赖它的 ASP.NET MVC 的某些功能。

例如,以下代码导致异常:

dynamic d = new object();
d.test = "jason";

例外是:

Dynamic operations can only be performed in homogenous AppDomain.

如果 legacyCasModel 设置为 true,有什么方法可以使 dynamic 关键字起作用? (如果设置为 false,一切正常,除了需要它的库。)

想法:

  1. 鉴于我完全信任运行,我假设 AppDomain 中的一个程序集正在使用减少的权限(因此是非同构的)。有没有一种方法可以简单地告诉它以完全信任模式运行,从而使 AppDomain 同质化?

  2. 我应该能够以某种方式重构我的代码以将有问题的程序集加载到另一个 AppDomain 中吗?我不熟悉这样做的典型方法,但它看起来很复杂。

  3. 我可以启用其他一些神奇的配置设置来使其工作吗?

【问题讨论】:

  • 您是否尝试将其加载到不同的应用程序域?有相关的源代码吗?

标签: asp.net asp.net-mvc permissions dynamic-data


【解决方案1】:

我没有使用太多 DLR 的东西,但我只是尝试了一个快速测试。在控制台应用程序中,相当于您的命令失败...

        dynamic d = new object();
        d.test = "jason";
        Console.WriteLine(d.test);

但这成功了……

        dynamic d = new ExpandoObject();
        d.test = "jason";
        Console.WriteLine(d.test);

当使用动态对象时,您可能需要使用 ExpandoObject 而不是普通的旧对象。

如果 ExpandoObject 不能满足您的需求,请使用更强大的功能,例如 http://clay.codeplex.com/

=== 编辑 ===

如果我完整阅读问题会有所帮助...

&lt;trust legacyCasModel="true" level="Full" /&gt; 添加到混合中会导致两者都失败并出现提供的错误。

"legacyCasModel" 强制使用非同质域,因为它是 .net4 之前的处理方式。这意味着动态对象和您的旧 CAS 库不兼容。

我能看到的唯一有效解决方法是将旧 CAS 库抽象为 run in a seperate application domain

【讨论】:

  • 我相信我第一次遇到麻烦时实际上有一个 ExpandoObject,由于同样的问题而不得不重写它。 :(
  • 我倾向于和你一样的结论。
  • 接受的答案 - 将尝试将其加载到不同的应用程序域。
猜你喜欢
  • 2013-03-13
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 2020-08-24
  • 1970-01-01
  • 2013-09-26
相关资源
最近更新 更多