gpt4 book ai didi

asp.net - LegacyCasModel ="true"和动态数据/操作

转载 作者:行者123 更新时间:2023-12-02 10:48:49 24 4
gpt4 key购买 nike

这类似于 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";

异常(exception)情况是:

Dynamic operations can only be performed in homogenous AppDomain.

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

想法:

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

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

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

最佳答案

我没有使用太多 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/

===编辑===

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

添加<trust legacyCasModel="true" level="Full" />混合会导致两者都失败并出现错误。

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

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

关于asp.net - LegacyCasModel ="true"和动态数据/操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5541143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com