asp.net-mvc - 使用 HttpSelfHostServer 和 IDependencyResolver 时为 "Inheritance security rules violated"

标签 asp.net-mvc asp.net-web-api

我正在尝试使用 HttpSelfHostServer 自托管 ASP.NET MVC 4 WebAPI。一切都很好,我尝试添加自定义依赖解析器。 (最终这将使用 StructureMap,但我还没有达到这一点)。如果我尝试实例化自定义解析器,则在启动服务器时会出现以下异常:

TypeLoadException: Inheritance security rules violated by type: 'System.Web.Mvc.CompareAttribute'. Derived types must either match the security accessibility of the base type or be less accessible.

代码如下:

public class CustomDependencyResolver : IDependencyResolver
{
    public object GetService( Type serviceType )
    {
        return null;
    }

    public IEnumerable<object> GetServices( Type serviceType )
    {
        return null;
    }
}

...

// To trigger the exception, all I need to do is instantiate the custom resolver.
var dependencyResolver = new CustomDependencyResolver();

// Exception is thrown when I create the server:
var server = new HttpSelfHostServer( _config );

请注意,我不必对解析器执行任何操作 - 实例化它的行为很简单,稍后会触发失败。

奇怪的是,这个异常只发生在调试(F5)中 - 如果我通过 Ctrl+F5 运行,一切正常。

关于如何解决这个问题有什么想法吗?

堆栈跟踪:

mscorlib.dll!System.Reflection.RuntimeAssembly.GetExportedTypes() + 0x27 bytes  
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerTypeCacheUtil.FilterTypesInAssemblies(System.Web.Http.Dispatcher.IBuildManager buildManager, System.Predicate<System.Type> predicate) + 0x104 bytes    
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerTypeCacheUtil.GetFilteredTypesFromAssemblies(string cacheName, System.Predicate<System.Type> predicate, System.Web.Http.Dispatcher.IBuildManager buildManager) + 0x76 bytes    
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerTypeCache.InitializeCache() + 0x58 bytes   
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerTypeCache.HttpControllerTypeCache(System.Web.Http.HttpConfiguration configuration) + 0x96 bytes    
System.Web.Http.dll!System.Web.Http.Dispatcher.DefaultHttpControllerFactory.DefaultHttpControllerFactory(System.Web.Http.HttpConfiguration configuration) + 0x96 bytes  
System.Web.Http.dll!System.Web.Http.Services.DefaultServiceResolver..ctor.AnonymousMethod__0(System.Web.Http.HttpConfiguration config) + 0x30 bytes 
System.Web.Http.dll!System.Web.Http.Services.DefaultServiceResolver.GetService(System.Type t) + 0x57 bytes  
System.Web.Http.dll!System.Web.Http.Services.DependencyResolver.GetService(System.Type serviceType) + 0xd3 bytes    
System.Web.Http.dll!System.Web.Http.DependencyResolverExtensions.GetService<System.Web.Http.Dispatcher.IHttpControllerFactory>(System.Web.Http.Services.DependencyResolver resolver) + 0x6a bytes   
System.Web.Http.dll!System.Web.Http.DependencyResolverExtensions.GetServiceOrThrow<System.Web.Http.Dispatcher.IHttpControllerFactory>(System.Web.Http.Services.DependencyResolver resolver) + 0x5b bytes    
System.Web.Http.dll!System.Web.Http.DependencyResolverExtensions.GetHttpControllerFactory(System.Web.Http.Services.DependencyResolver resolver) + 0x25 bytes    
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerDispatcher.HttpControllerDispatcher(System.Web.Http.HttpConfiguration configuration) + 0x77 bytes  
System.Web.Http.SelfHost.dll!System.Web.Http.SelfHost.HttpSelfHostServer.HttpSelfHostServer(System.Web.Http.SelfHost.HttpSelfHostConfiguration configuration) + 0x62 bytes  
WebApi.Host.dll!My.WebApi.Host.Server.Listen() Line 33 + 0x1b bytes C#
Services.TrialBalance.TestHarness.exe!Digita.AccountsPro.Services.TrialBalance.TestHarness.Program.Main() Line 21 + 0xa bytes   C#
[Native to Managed Transition]  
[Managed to Native Transition]  
mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x6d bytes    
Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() + 0x2a bytes  
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x63 bytes   
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool ignoreSyncCtx) + 0xb0 bytes    
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x2c bytes    
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes   
[Native to Managed Transition]  

最佳答案

终于找到答案了;因此回答我自己的问题。

结果有两个 IDependencyResolver:一个在 System.Web.Http.Services 中,另一个在 System.Web.Mvc 中。

均以非调试方式编译和运行。

System.Web.Http.Services.IDependencyResolver 是正确的

System.Web.Mvc.IDependencyResolver 似乎会导致问题。

关于asp.net-mvc - 使用 HttpSelfHostServer 和 IDependencyResolver 时为 "Inheritance security rules violated",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10208188/

相关文章:

c# - 从另一个列表对象创建对象列表 LINQ Lambda

javascript - 将初始 Razor 输出与 Angular 更新相结合

vb.net - 如何访问 RouteTable.Routes.MapHttpRoute?

android - 使用 Google 身份验证从 Android 客户端使用 WebAPI2 站点

c# - 如何在 Web API 身份验证服务中获取包含在我的 AuthTicket 中的声明?

C# WebApiConfig MapHttpRoutes 与 Action AND optional DateTime(-string) AND optional id

jquery - 将 ASP.NET MVC 验证与 jquery ajax 一起使用?

c# - 返回列表,如果为空且计数 == 0。跳转到其他

c# - httpclient.GetAsync : The underlying connection was closed: An unexpected error occurred on a send

c# - 将复杂参数传递到 GET 请求中