Код работает неожиданно после размещения в IIS - PullRequest
0 голосов
/ 05 ноября 2019

Ниже приведен код для построения кэша, в котором хранятся (typeName, type), найденные в сборках, загруженных в текущий домен приложения.

Я сталкиваюсь с этой странной проблемой при попытке загрузить типы из одной конкретной сборкискажем, сборка. Сборка K насчитывает около 954 типов. Журналы синхронизированы, и все работает хорошо, когда локально размещается в Visual Studio. Кроме того, при развертывании веб-сайта в IIS он хорошо работает при первом вызове buildCache.

Однако, когда пул приложений перезапускается / после его вызова позднее, он запускает вложенный цикл только для5 типов и продолжает выполнение следующей функции, то есть она не выдает никаких исключений и перемещается вперед.

private static void BuildCache()
{
    Assembly[] assemblies= AppDomain.CurrentDomain.GetAssemblies();

    foreach(Assembly assembly in assemblies){

    if(assembly.GlobalAssemblyCache){
    if(assemblly.ToString().Contains("assemblyK"))
    Logger.Log("GAC");
    continue;
    }
    try
    {
    if(assembly.ToString().Contains("AssemblyK"))
    {
    string allTypes = string.Join(",",assembly.GetTypes().Select(x => x.ToString()).ToArray())
    Logger.Log("All types :{0}",allTypes);
    }

    foreach(Type type in assembly.GetTypes())
    {
      if(assembly.ToString().Contains("AssemblyK"))
    {
    Logger.Log("Type parsed :{0}",type);
    }
    if(!typeCache.ContainsKey(type.FullName))
    {
     if(assembly.ToString().Contains("AssemblyK"))
    {
    Logger.Log("Adding to cache :{0}",type);
    }
    typeCache.Add(type.FullName,type);
    }        
    } 
catch(Exception ex)
{
Logger.Log("Exception Caught : {0}",ex.ToString());
} 
}   

}

Примечательно, что AssemblyK.dll собирается в Visual Studio 2008 в. Net 3.5 версия работает все хорошо и при соблюдении в Visual Studio 2019 вызывает проблему. Пул приложений 2.0. И сборка K загружается в «сборки» всегда. Пожалуйста, помогите.

PS: Я скопировал журналы для всех типов, полученных в обоих случаях (когда он работает и не работает), в два файла и произвел сравнение файлов с помощью cmd, с fc file1 file2. Оба содержали одинаковые данные т.е. 954 типа. Итак, мой вопрос, как может foreach работать случайно? В чем может быть проблема здесь?

Обновление: Журналы читаются:

1) В рабочем случае : Все типы: Тип1, Тип2, Тип3, .. Тип954

Тип Parsed954 раза

Добавление в кэш 954 раза

2) В нерабочем случае : все типы: Тип1, Тип2, Тип3, .. Тип954.

Тип Pased 4 раза.

typeCache - это частный статический словарь, доступный только для чтения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...