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

C# 动态类型可以在CLR函数中使用吗?,c#,sql-server,sql-server-2012,clr,sqlclr,C#,Sql Server,Sql Server 2012,Clr,Sqlclr,我的任务是编写一个CLR函数,使用它可以批量发送电子邮件。在程序集和其他问题上遇到很多障碍后,我设法修补了大部分功能。唯一剩下的就是添加发送这些电子邮件(我已经有了代码)。不幸的是,在添加代码后,我出现了以下错误: 只能在同质AppDomain中执行动态操作 事实证明,Mandrill.Net(在引擎盖下使用)广泛使用了动态类型。显然,我确实在寻找解决这个问题的方法,我发现的大部分方法都是这样的: 这就是将这两行添加到项目的配置文件中。我将解决方案应用于app.config文件,但没有任何更

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

只能在同质AppDomain中执行动态操作

事实证明,Mandrill.Net(在引擎盖下使用)广泛使用了动态类型。显然,我确实在寻找解决这个问题的方法,我发现的大部分方法都是这样的:


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

老实说,我在Sql Server CLR上下文中找不到有关此问题的任何信息,因此我突然想到,在该上下文中可能实际上不可能使用这些类型(就像Sql Server控制着阻止使用动态类型的策略,而不是我自己的库)。这些动态类型是否可以在SQL Server的CLR函数中实际使用

另外,在我的代码中,我也在使用。在早期阶段,当我显式地使用
dynamic
type存储查询结果时,我也遇到了这个错误(事实上,Dapper将这些结果返回为
IEnumerable
)。然而,在添加Linq
Cast()
之后,错误消失了(尽管Dapper仍然可能在
动态类型上操作)。

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

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


另一方面,Mandrill.Net将动态类型传递给RestSharp,这是符合CAS策略的禁忌(?)

SQL Server可能会忽略您的自定义配置文件(与ASP.Net或常规.Net加载程序不同)。出于测试目的,能否将这些设置(顺便提一下,我认为您的意思是
legacyCasModel=“true”
)添加到
sqlservr.exe.config
文件中,该文件与
sqlservr.exe
位于同一目录中?可能需要重新启动SQL Server。即使这样做行得通,也要小心,因为我不确定这一举动的全部含义是什么(因为很明显,这对SQL Server中加载的所有程序集都是全局的)。
<NetFx40_LegacySecurityPolicy enabled="true"/>
<trust legacyCasModel="false" level="Full" />