Вы можете сохранить свойство базы данных user_version
и проверить, изменилось ли оно. Чтобы установить его, вы должны использовать PRAGMA user_version = {version};
, а для запроса текущей версии вы будете использовать PRAGMA user_version;
Это происходит из-за загрузки в другой контекст. Как Вы загружаете блок (Загрузка / LoadFrom / ReflectionOnlyLoad) определяет, в какой контекст это загружается. Этот простой пример также демонстрирует проблему:
using System;
using System.Reflection;
class Foo
{
public static void Main()
{
var type = typeof(Foo);
var reflectionLoadType = Assembly.ReflectionOnlyLoad("ConsoleApplication1").GetType("Foo");
Console.WriteLine(type == reflectionLoadType); //false
Console.WriteLine(type.Equals(reflectionLoadType)); //false
Console.WriteLine("DONE");
Console.ReadKey();
}
}
Посмотрите здесь для большего количества информации.
У меня была подобная проблема. У меня также была эта архитектура-.DLL, который содержит базовый класс ClientPlugin; несколько плагинов, которые ссылаются на этот.DLL; и главное приложение, которое также ссылается на этот.DLL. Проблема состояла в том, что.DLL с базовым классом ClientPlugin был скопирован в двух папках - и папка Plugins и папка главного приложения. Таким образом это было загружено дважды в моем AppDomain (плагины также загрузили его косвенно). И когда главное приложение пыталось сделать, отражение вводит волшебство, оно перестало работать, потому что было два экземпляра типа ClientPlugin.
Хотя я не думаю, что это - точно Ваш случай, все еще существует урок для изучения здесь - если.DLL будет загружен дважды, то типы будут также дублированы. В Вашем случае я подозревал бы или отдельный AppDomains или "ReflectionOnlyLoad", потому что.DLL затем загружается так или иначе по-другому.