C# 在应用程序池回收后使用MsgPack序列化程序时使用REGDB_E_CLASSNOTREG

C# 在应用程序池回收后使用MsgPack序列化程序时使用REGDB_E_CLASSNOTREG,c#,wcf,iis,application-pool,msgpack,C#,Wcf,Iis,Application Pool,Msgpack,我们在IIS 10中托管了一个WCF服务应用程序 每次IIS在不活动20分钟后回收应用程序池时,在使用MsgPack进行反序列化时都会出现以下异常: The type initializer for 'MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager' threw an exception. System.TypeInitializationException: The type initi

我们在IIS 10中托管了一个WCF服务应用程序

每次IIS在不活动20分钟后回收应用程序池时,在使用MsgPack进行反序列化时都会出现以下异常:

The type initializer for 'MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager' threw an exception. System.TypeInitializationException: The type initializer for 'MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager' threw an exception. ---> System.Runtime.InteropServices.COMException: Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
   at System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(RuntimeAssembly containingAssembly, Boolean emitSymbolInfo, String name, String filename, StackCrawlMarkHandle stackMark, IntPtr& pInternalSymWriter, ObjectHandleOnStack retModule, Boolean fIsTransient, Int32& tkFile)
   at System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(RuntimeAssembly containingAssembly, Boolean emitSymbolInfo, String name, String filename, StackCrawlMark& stackMark, IntPtr& pInternalSymWriter, Boolean fIsTransient, Int32& tkFile)
   at System.Reflection.Emit.AssemblyBuilder.DefineDynamicModuleInternalNoLock(String name, String fileName, Boolean emitSymbolInfo, StackCrawlMark& stackMark)
   at System.Reflection.Emit.AssemblyBuilder.DefineDynamicModuleInternal(String name, String fileName, Boolean emitSymbolInfo, StackCrawlMark& stackMark)
   at System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(String name, String fileName, Boolean emitSymbolInfo)
   at MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager..ctor(Boolean isDebuggable, Boolean isCollectable, AssemblyBuilder assemblyBuilder)
   at MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager.Create(Boolean isDebuggable, Boolean isCollectable, AssemblyBuilder assemblyBuilder)
   at MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager..cctor()
   --- End of inner exception stack trace ---
   at MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager.Get(SerializationMethodGeneratorOption option)
   at MsgPack.Serialization.EmittingSerializers.AssemblyBuilderSerializerBuilder.<>c__DisplayClass63_0.<CreateCodeGenerationContextForSerializerCreation>b__1()
   at MsgPack.Serialization.EmittingSerializers.AssemblyBuilderEmittingContext.get_Emitter()
   at MsgPack.Serialization.EmittingSerializers.AssemblyBuilderEmittingContext.BeginMethodOverride(String name)
   at MsgPack.Serialization.AbstractSerializers.SerializerBuilder`2.BuildObjectPackTo(TContext context, SerializationTarget targetInfo, Boolean isAsync)
   at MsgPack.Serialization.AbstractSerializers.SerializerBuilder`2.BuildObjectSerializer(TContext context)
   at MsgPack.Serialization.AbstractSerializers.SerializerBuilder`2.BuildSerializer(TContext context, Type concreteType, PolymorphismSchema schema, SerializationTarget& targetInfo)
   at MsgPack.Serialization.AbstractSerializers.SerializerBuilder`2.BuildSerializerInstance(SerializationContext context, Type concreteType, PolymorphismSchema schema)
   at MsgPack.Serialization.MessagePackSerializer.CreateInternal[T](SerializationContext context, PolymorphismSchema schema)
   at MsgPack.Serialization.SerializationContext.GetSerializer[T](Object providerParameter)
MsgPack.Serialization.emittengSerializers.SerializationMethodGeneratorManager'的类型初始值设定项引发异常。System.TypeInitializationException:“MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager”的类型初始值设定项引发异常。-->System.Runtime.InteropServices.ComeException:未注册类(HRESULT:0x80040154(REGDB_E_CLASSNOTREG)的异常)
在System.Reflection.Emit.AssemblyBuilder.DefinedDynamicModule(RuntimeAssembly包含Assembly、Boolean emitSymbolInfo、字符串名称、字符串文件名、StackScrawMarkHandle stackMark、IntPtr和pInternalSymWriter、ObjectHandleOnStack retModule、Boolean fIsTransient、Int32和tkFile)
位于System.Reflection.Emit.AssemblyBuilder.DefinedDynamicModule(运行时程序集,包含Assembly、Boolean emitSymbolInfo、字符串名称、字符串文件名、StackScrawMark和stackMark、IntPtr和pInternalSymWriter、Boolean fIsTransient、Int32和tkFile)
位于System.Reflection.Emit.AssemblyBuilder.DefinedDynamicModuleInternalNolock(字符串名称、字符串文件名、布尔emitSymbolInfo、StackScrawlMark和stackMark)
位于System.Reflection.Emit.AssemblyBuilder.DefinedDynamicModuleInternal(字符串名称、字符串文件名、布尔emitSymbolInfo、StackScrawlMark和stackMark)
位于System.Reflection.Emit.AssemblyBuilder.DefinedDynamicModule(字符串名称、字符串文件名、布尔emitSymbolInfo)
在MsgPack.Serialization.emittengSerializers.SerializationMethodGeneratorManager..ctor(布尔值可编辑,布尔值可编辑,汇编生成器)
在MsgPack.Serialization.emittengSerializers.SerializationMethodGeneratorManager.Create(布尔值为可编辑,布尔值为可收集,AssemblyBuilder为可编辑)
在MsgPack.Serialization.emittengSerializers.SerializationMethodGeneratorManager..cctor()处
---内部异常堆栈跟踪的结束---
位于MsgPack.Serialization.EmittingSerializers.SerializationMethodGeneratorManager.Get(SerializationMethodGeneratorOption选项)
在MsgPack.Serialization.emittengSerializers.AssemblyBuilderSerializerBuilder.c__DisplayClass63_0.b__1()中
在MsgPack.Serialization.emittengserializers.AssemblyBuilderMittingContext.get_Emitter()中
位于MsgPack.Serialization.emittengserializers.AssemblyBuilderMittingContext.BeginMethodOverride(字符串名称)
在MsgPack.Serialization.AbstractSerializers.SerializerBuilder`2.BuildObjectPackTo(TContext上下文,SerializationTargetTargetInfo,布尔isAsync)
位于MsgPack.Serialization.AbstractSerializers.SerializerBuilder`2.BuildObjectSerializer(TContext上下文)
位于MsgPack.Serialization.AbstractSerializers.SerializerBuilder`2.BuildSerializer(TContext上下文、类型concreteType、多态模式模式、SerializationTarget和targetInfo)
位于MsgPack.Serialization.AbstractSerializers.SerializerBuilder`2.BuildSerializerInstance(SerializationContext上下文,类型concreteType,多态模式)
在MsgPack.Serialization.MessagePackSerializer.CreateInternal[T](序列化上下文,多态模式)
位于MsgPack.Serialization.SerializationContext.GetSerializer[T](对象提供程序参数)
当我手动回收应用程序池时,问题消失了,一切正常。在发生自动回收事件之前,问题会再次出现

我已经强制所有程序集在应用程序启动后立即加载到AppDomain中,代码如下:

var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();
var assemblies=BuildManager.getReferencedAssemblys().Cast();

有人对此有线索吗?

这是一个开源项目,为什么不在GitHub上ping它的开发人员呢?我在GitHub上打开了一个问题,但到目前为止,这种行为还不清楚。。。我想知道为什么自动回收和手动回收有区别。