`IPluginInterface.GetPluginConfig` causes `FileReadException` when the last saved config type was not defined by the calling assembly
ionite34 opened this issue · 0 comments
ionite34 commented
19:02:36.641 | ERR | [WindowSystem] Error during Draw(): ConfigWindow
Dalamud.Storage.FileReadException: Failed to read file
---> Newtonsoft.Json.JsonSerializationException: Error resolving type specified in JSON 'SamplePlugin.Configuration, SamplePlugin'. Path '$type', line 2, position 53.
---> System.IO.FileLoadException: Could not load file or assembly 'SamplePlugin, Culture=neutral, PublicKeyToken=null'. Operation is not supported. (0x80131515)
File name: 'SamplePlugin, Culture=neutral, PublicKeyToken=null'
---> System.NotSupportedException: Resolving to a collectible assembly is not supported.
at System.Reflection.RuntimeAssembly.<InternalLoad>g____PInvoke|49_0(NativeAssemblyNameParts* __pAssemblyNameParts_native, ObjectHandleOnStack __requestingAssembly_native, StackCrawlMarkHandle __stackMark_native, Int32 __throwOnFileNotFound_native, ObjectHandleOnStack __assemblyLoadContext_native, ObjectHandleOnStack __retAssembly_native)
at System.Reflection.RuntimeAssembly.InternalLoad(AssemblyName assemblyName, StackCrawlMark& stackMark, AssemblyLoadContext assemblyLoadContext, RuntimeAssembly requestingAssembly, Boolean throwOnFileNotFound)
at System.Reflection.Assembly.LoadWithPartialName(String partialName)
at Newtonsoft.Json.Serialization.DefaultSerializationBinder.GetTypeFromTypeNameKey(StructMultiKey`2 typeNameKey)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Newtonsoft.Json.Serialization.DefaultSerializationBinder.GetTypeByName(StructMultiKey`2 typeNameKey)
at Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(String assemblyName, String typeName)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolveTypeName(JsonReader reader, Type& objectType, JsonContract& contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, String qualifiedTypeName)
...
Since SavePluginConfig
gets the type from the actual instance passed to it, can GetPluginConfig
have an overload with generic type or Type
argument? Since otherwise it seems impossible for library code to call GetPluginConfig on behalf of another assembly.