可以在 CLR 函数中使用动态类型吗?

Can dynamic types be used in a CLR functions?

我的任务是编写一个 CLR 函数,该函数可以使用 Mandrill.Net 批量发送电子邮件。在经历了很多程序集和其他问题的障碍之后,我设法修补了大部分功能。唯一剩下的就是添加发送这些电子邮件(我已经有了相关代码)。不幸的是,在我添加代码后出现了这个错误:

Dynamic operations can only be performed in homogenous AppDomain

事实证明 Mandrill.Net(和 RestSharp which is used under the hood) makes extensive use of dynamic types. Obviously I did search for solutions for this problem and most of what I found looked like this:

<NetFx40_LegacySecurityPolicy enabled="true"/>
<trust legacyCasModel="false" level="Full" />

也就是将这两行添加到项目的配置文件中。我将解决方案应用于 app.config 文件,但没有任何改变,我仍然收到错误(是的,我在 Sql 服务器中重新创建了程序集和函数)。

说实话我在 Sql 服务器 CLR 上下文中找不到任何关于这个问题的信息,所以我想到在那个上下文中使用这些类型实际上是不可能的(比如SQL 服务器控制着阻止使用动态类型的策略,而不是我自己的库)。 SQL 服务器中的 CLR 函数实际上可以使用这些动态类型吗?

P.S。在我的代码中,我还使用了 Dapper。在早期阶段,当我明确使用 dynamic 类型来存储查询结果时,我也遇到了这个错误(实际上 Dapper returns 那些 IEnumerable<dynamic>)。然而,在添加 Linq Cast<Dictionary<string,object>>() 之后,错误消失了(尽管 Dapper 仍然可能在 dynamic 类型上运行)。

根据我得到的答案 here,我可能无法在 CLR 中使用动态类型,或者至少不能达到允许我使用 Mandrill.Net.

的程度

我的猜测是,我实际上可以使用动态类型,只要我将它保留在单个命名空间中即可。 Dapper 可以在内部使用动态类型,我可以在我的 CLR 中使用 dapper,但我不能让 dapper 将动态类型传回我的 CLR function\procedure(除非我将它们转换为不太动态的东西)。

另一方面,Mandrill.Net 将动态类型传递给 RestSharp,这是根据 CAS 策略(?)禁止的。