Asp.net mvc ASP.net MVC 4和Autofac错误-重写成员时违反继承安全规则

Asp.net mvc ASP.net MVC 4和Autofac错误-重写成员时违反继承安全规则,asp.net-mvc,autofac,Asp.net Mvc,Autofac,在ASP.MVC 4上配置Autofac时,我遇到一些奇怪的错误。我曾与Autofac在MVC4上成功合作过许多其他项目。此MVC项目位于.Net 4.5.2中,我正在引用nuget的以下Autofac库: Autofac版本=3.5.2 Autofac.Mvc4版本=3.1.0 我得到的错误是: 重写成员时违反了继承安全规则:“Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(System.Type)”。重写方法的安全可访

在ASP.MVC 4上配置Autofac时,我遇到一些奇怪的错误。我曾与Autofac在MVC4上成功合作过许多其他项目。此MVC项目位于.Net 4.5.2中,我正在引用nuget的以下Autofac库:

Autofac版本=3.5.2

Autofac.Mvc4版本=3.1.0

我得到的错误是:

重写成员时违反了继承安全规则:“Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(System.Type)”。重写方法的安全可访问性必须与被重写方法的安全可访问性匹配

奇怪的是,我的代码甚至没有被调用,因为这个错误被触发了!!我的代码如下:

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        try
        {
            AutofacDependencyResolverHelper.RegisterAutofac();
        }
        catch (Exception ex)
        {
            Trace.Write(ex.Message);
            throw;
        }

    }


     public class AutofacDependencyResolverHelper
{
    public static void RegisterAutofac()
    {
        var container = GetContainer();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    }

    public static IContainer GetContainer()
    {
        var assemblies = new List<Assembly>();
        assemblies.Add(Assembly.Load("Core.Infrastructure"));
        assemblies.Add(Assembly.Load("Core.GenericRepository"));
        assemblies.Add(Assembly.Load("Core.Common"));
        assemblies.Add(Assembly.Load("CRM.Interfaces"));
        assemblies.Add(Assembly.Load("CRM.Data"));
        assemblies.Add(Assembly.Load("CRM.Dtos"));
        assemblies.Add(Assembly.Load("CRM.Entities"));
        assemblies.Add(Assembly.Load("CRM.Business"));

        var builder = new ContainerBuilder();
        builder.RegisterAssemblyTypes(assemblies.ToArray()).AsImplementedInterfaces();
        builder.RegisterControllers(Assembly.Load("CRM.Web.Mvc4"));
        var container = builder.Build();
        return container;
    }
}
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
尝试
{
AutofacDependencyResolverHelper.RegisterAutofac();
}
捕获(例外情况除外)
{
跟踪。写入(例如消息);
投掷;
}
}
公共类AutofacDependencyResolverHelper
{
公共静态无效注册表Autofac()
{
var container=GetContainer();
SetResolver(新的AutofacDependencyResolver(容器));
}
公共静态IContainer GetContainer()
{
var assemblies=新列表

更新为完整配置:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="angularjs.TypeScript.DefinitelyTyped" version="4.2.7" targetFramework="net46" />
  <package id="Antlr" version="3.4.1.9004" targetFramework="net46" />
  <package id="Autofac" version="3.5.2" targetFramework="net46" />
  <package id="Autofac.Mvc4" version="3.1.0" targetFramework="net46" />
  <package id="bootstrap" version="3.0.0" targetFramework="net46" />
  <package id="jQuery" version="1.10.2" targetFramework="net46" />
  <package id="jquery.TypeScript.DefinitelyTyped" version="0.0.1" targetFramework="net46" />
  <package id="jQuery.Validation" version="1.11.1" targetFramework="net46" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Modernizr" version="2.6.2" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net46" />
  <package id="Respond" version="1.2.0" targetFramework="net46" />
  <package id="WebGrease" version="1.5.2" targetFramework="net46" />
</packages>

好的,找到了问题。尽管是MVC4应用程序,我还是使用nuget添加了对Autofac MVC5的引用,解决了问题。即:

软件包id=“Autofac.Mvc5”version=“3.3.4”targetFramework=“net452”

而不是:

软件包id=“Autofac.Mvc4”version=“3.1.0”targetFramework=“net46”


奇怪。但是它成功了!

你能展示整个包的.config吗?嗨,用完整的.config详细信息更新了上面的帖子。如果你看一下你的MVC参考资料,它是5.2.3版-MVC 5,而不是MVC 4。这就是为什么它被修复了。很高兴它现在为你工作了!