我正在更新一个较旧的项目,以使用.net 471,而不是462,以及所有nuget包的最新版本。
我有很多版本控制问题要解决,但我终于得到了一个构建的项目。
但是,当我执行程序时,我会得到以下异常:
安全透明方法( 'Autofac.Integration.WebApi.RegistrationExtensions.RegisterApiControllers(Autofac.ContainerBuilder,System.Reflection.Assembly[])访问安全关键类型'Autofac.Builder.IRegistrationBuilder`3‘的尝试失败。
紧接着是
程序集'Autofac.Integration.WebApi,Version=3.0.0.0,Culture=neutral,PublicKeyToken=17863af14b0044da‘用AllowPartiallyTrustedCallersAttribute标记,并使用级别2安全透明模型。级别2透明度导致AllowPartiallyTrustedCallers程序集中的所有方法默认为安全透明的,这可能是此例外的原因。
在调用时会发生这种情况:
builder.RegisterApiControllers(ThisAssembly);其中构建器是一个Autofac ContainerBuilder。
问题
就像主题说的,这一定是SecurityCritical和AllowPartiallyTrustedCallersAttribute之间的某种冲突,但是我不知道我是如何介绍它的,也不知道什么是最好的动作,所以
怎么回事,我怎么解决这个问题?
更新
对于JLe的建议,我删除了webapi引用,转而使用了webapi2。我的日志记录设置有一个相关的错误,但由于这不是“核心功能”,所以我暂时跳过了它(我需要回到它),看看我会得到什么。我到了浏览器屏幕,它给了我以下内容:
方法'my.namespace.MyController+d__6.MoveNext()‘是安全透明的,但是安全关键类型的成员。
我尝试将[SecurityCritical]放在控制器类上,但显然不允许在具有该属性的类中执行异步调用:
错误CS4031异步方法不允许出现在具有“SecurityCritical”或“SecuritySafeCritical”属性的接口、类或结构中。
但我无法修复这个问题,因为我正在对后端(NServicebus ESB)执行异步调用。
发布于 2018-11-28 07:38:14
确保您使用的是nuget.org/packages/Autofac.WebApi2,如果是针对WebApi2的话,而不是只使用Autofac.WebApi的旧名称(但是名称空间是相同的,Autofac.Integration.WebApi)。
https://stackoverflow.com/questions/53481867
复制相似问题