在IIS中托管后,代码工作异常

下面是构建缓存的代码,该缓存存储在当前应用程序域中加载的程序集中找到的(typeName,type)。

当尝试从一个特定的程序集(例如AssemblyK)加载类型时,我面临着这个奇怪的问题。 assemblyK具有大约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());
} 
}   

}

值得注意的是,在Visual Studio 2008中以.Net 3.5版本构建的AssemblyK.dll运行良好,并且在Visual Studio 2019中进行编译时会导致此问题。应用程序池为2.0。并且assemblyK始终加载在“程序集”中。请帮忙。

P.S .:我将两种情况下(无论工作与否)收到的allTypes的日志复制到两个文件中,并使用cmd和fc file1 file2进行了文件比较。 两者都包含相同的数据,即954类型。所以我的问题是,foreach如何随机运行?这里可能是什么问题?

更新:日志显示为:

1)在可行的情况下: 所有类型:Type1,Type2,Type3,.. Type954

类型已解析954次

添加到缓存954次

2)在不工作的情况下: 所有类型:Type1,Type2,Type3,.. Type954。

键入Pased 4次。

typeCache是​​私有静态只读词典

z492572861 回答:在IIS中托管后,代码工作异常

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3159096.html

大家都在问