【问题标题】:Autofac exception - security critical vs level 2 security transparencyAutofac 异常 - 安全关键与 2 级安全透明度
【发布时间】:2019-04-28 03:25:30
【问题描述】:

我正在更新一个旧项目以使用 .net 471 而不是 462 和所有 nuget 包的最新版本。

我有很多版本控制问题需要解决,但我终于得到了一个可以构建的项目。

但是,当我执行编程时,我得到了这个异常:

System.TypeAccessException: '尝试通过安全透明方法 'Autofac.Integration.WebApi.RegistrationExtensions.RegisterApiControllers(Autofac.ContainerBuilder, System.Reflection.Assembly[])' 访问安全关键类型 'Autofac.Builder.IRegistrationBuilder`3' 失败了。

紧随其后

Assembly 'Autofac.Integration.WebApi,版本=3.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da' 标有 AllowPartiallyTrustedCallersAttribute,并使用 2 级安全性 透明度模型。 2 级透明度导致所有方法在 AllowPartiallyTrustedCallers 程序集变得安全透明 默认情况下,这可能是导致此异常的原因。'

调用时会发生这种情况:

builder.RegisterApiControllers(ThisAssembly);

builder 是Autofac ContainerBuilder

问题

就像题主说的,SecurityCriticalAllowPartiallyTrustedCallersAttribute之间一定有某种冲突,但我不知道我是怎么介绍的,最好的做法是什么,所以

发生了什么,我该如何解决?

更新

根据 JLe 的建议,我删除了 webapi 引用并改用 webapi2。我的日志记录设置出现了一个相关错误,但由于这不是“核心功能”,我现在跳过它(我需要回到那个)看看我会得到什么。我进入浏览器屏幕,它给了我这个:

方法 'my.namespace.MyController+d__6.MoveNext()' 是 安全透明,但属于安全关键类型。

我尝试将[SecurityCritical] 放在控制器类上,但显然您不允许在具有该属性的类中进行异步调用:

错误 CS4031 接口、类或接口中不允许使用异步方法 具有“SecurityCritical”或“SecuritySafeCritical”的结构 属性。

但我无法修复这个问题,因为我正在对后端 (NServicebus ESB) 进行异步调用。

【问题讨论】:

  • 我只是在猜测,但 Autofac.WebApi2 包是用于 WebApi2 的,所以我可能是旧包创建了一些版本冲突,导致您的异常。你能试着把旧的删掉吗?
  • 我刚试过,但是RegisterApiControllersAutofacWebApiDependencyResolver需要webapi。
  • 您是否尝试过清洁您的解决方案? WebApi2 包也应该包含那些,版本 4.2.0。它的实际命名空间是相同的,Autofac.Integration.WebApi,即使它是版本 2。
  • @JLe:您关于清理软件包的建议最终修复了它(确保我使用的是 webapi2)。你能写一个答案让我接受吗?

标签: c# asp.net .net asp.net-web-api2 autofac


【解决方案1】:

确保您使用 nuget.org/packages/Autofac.WebApi2 作为 WebApi2 的那个,而不是旧的称为 Autofac.WebApi 的那个(尽管命名空间相同,Autofac.Integration.WebApi)。

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 2013-10-04
    • 1970-01-01
    • 2017-03-15
    • 2013-12-13
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多