C# “ASP.net例外情况”;FileNotFoundException“;当bin文件夹中存在程序集文件时处于空闲状态

C# “ASP.net例外情况”;FileNotFoundException“;当bin文件夹中存在程序集文件时处于空闲状态,c#,asp.net,.net-assembly,filenotfoundexception,C#,Asp.net,.net Assembly,Filenotfoundexception,该文件存在、名称正确且未损坏。如果我把它从“垃圾箱”中移出和返回,它会再次工作,大约5分钟,然后错误的吼声就会回来。任何刷新文件的操作都可以,重新发布、重命名或移动都可以让站点暂时恢复工作 {“消息”:“无法加载文件或程序集\u0027Ouranos, Version=1.0.0.0,Culture=fr CA,PublicKeyToken=null\u0027或其中一个 它的依赖性。Le fichier spécifiéest introvable.,“StackTrace”: 异步(字符串维

该文件存在、名称正确且未损坏。如果我把它从“垃圾箱”中移出和返回,它会再次工作,大约5分钟,然后错误的吼声就会回来。任何刷新文件的操作都可以,重新发布、重命名或移动都可以让站点暂时恢复工作

{“消息”:“无法加载文件或程序集\u0027Ouranos, Version=1.0.0.0,Culture=fr CA,PublicKeyToken=null\u0027或其中一个 它的依赖性。Le fichier spécifiéest introvable.,“StackTrace”: 异步(字符串维X、字符串维Y、字符串 操作、字符串区域性、字符串利用率、字符串接口、字符串 来源,字符串Champ,字符串Valeur,字符串Classement,字符串 方向,strifilenotfound异常页,字符串 Itérations)”,“ExceptionType:“System.IO.”


Fusion确实给了我一个错误代码(0x80070002),它指示我获取过程监视器。这将引导我找到临时程序集文件夹。现在我可能错了。比较健康网站和病态网站的缓存文件,我发现了一些奇怪的东西

  • 健康网站作为缓存中BIN的所有DLL
  • 生病的网站在缓存中缺少两个DLL,它们位于BIN中
现在,我知道ASP.net倾向于说主库丢失了,而实际上它是缺少的引用库之一。在目前的情况下,我不知道我能做些什么来解决这个问题。这两个DLL没有在缓存中设置,因此当它尝试加载主DLL时,它无法从缓存中找到另外两个DLL,并抛出一个在主DLL上找不到的文件

两名罪犯是:

  • PresentationCore.dll
  • WindowsBase.dll

要解决这类错误,您可以使用Fusion log,有关如何启用它以及如何使用它的说明可以在这里找到:。

下面的代码似乎确实解决了这个问题。它检查部件的所有必需部件,并加载缺失的部件。我以前有过这样的代码,但它不起作用,因为没有
!(Assembleée是System.Reflection.Emit.AssemblyBuilder)和&(Assembleée.GetType().FullName!=“System.Reflection.Emit.InternalAssemblyBuilder”)
不存在,其代码在.net 4.0及以上版本中导致异常。虽然不雅致,但它很管用

public static void Chargeur()
{
    var Assemblées_Chargées = (from Assembly Assemblée in AppDomain.CurrentDomain.GetAssemblies() where !(Assemblée is System.Reflection.Emit.AssemblyBuilder) && (Assemblée.GetType().FullName != "System.Reflection.Emit.InternalAssemblyBuilder") && (!Assemblée.GlobalAssemblyCache) && (Assemblée.CodeBase != Assembly.GetExecutingAssembly().CodeBase) select Assemblée).ToList();

    var Chemins_Chargés = Assemblées_Chargées.Select(Assemblée => Assemblée.Location).ToArray();
    var Chemins_Référencés = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll");
    var Assemblées_NonChargées = Chemins_Référencés.Where(Références => !Chemins_Chargés.Contains(Références, StringComparer.InvariantCultureIgnoreCase)).ToList();

    Assemblées_NonChargées.ForEach(path => Assemblées_Chargées.Add(AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(path))));
}

Fusion确实给了我一个错误代码(0x80070002),我将用新信息编辑我的主要帖子。只是随机的,根据这个:,两个程序集都有32位和64位版本,请尝试在IIS和/或您的应用程序上强制使用32位模式,看看是否有帮助。它已经是32位了,以前尝试过,但遗憾的是,这并不是问题所在。真正的问题是“PresentationCore.dll”和“WindowsBase.dll”,它们不缓存,因为它们是.net本地人,但在文件刷新后仅能工作约5分钟,然后就消失了