可以在 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 策略(?)禁止的。
我的任务是编写一个 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 策略(?)禁止的。