文件存在,名称正确且未损坏。如果我将它从“Bin”移出并重新进入,它再次工作,大约5分钟,然后错误发生回来。刷新文件的任何操作都可以,重新发布,重命名或移动会使网站重新工作一会儿。
{“消息”:“无法加载文件或程序集\ u0027Ouranos, 版本= 1.0.0.0,Culture = fr-CA,PublicKeyToken = null \ u0027或其中之一 它的依赖关系。 Lefichierspécifiéestintrouvable。“,”StackTrace“:” 在Services.Asynchrone(String DimensionX,String DimensionY,String Action,String Culture,String Utilisateur,String Interface,String Source,String Champ,String Valeur,String Classement,String Direction,StriFileNotFoundExceptionng Page,String 迭代)”, “ExceptionType”: “System.IO”}
Fusion确实给了我一个错误代码(0x80070002),它指向我获取Process Monitor。这导致我到临时装配文件夹。现在我可能错了。比较一个健康的网站和病态网站的缓存文件,我发现了一些奇怪的东西。
现在,我知道ASP.net倾向于说主要库是缺失的,因为它实际上是缺少的引用库之一。在目前的情况下,我不知道我能做些什么来解决这个问题。这两个DLL没有在缓存中设置,因此当它尝试加载主DLL时,无法从缓存中找到另外两个DLL并抛出在主DLL上找不到的文件。
两个罪魁祸首是:
答案 0 :(得分:0)
要解决此类错误,您可以使用Fusion日志,有关如何启用它以及如何使用它的说明,请访问:How to enable assembly bind failure logging (Fusion) in .NET。
答案 1 :(得分:0)
以下代码似乎实际上解决了这个问题。它检查装配所需的所有装配并加载缺失的装配。我之前有过这样的代码并且它不起作用,因为没有!(Assemblée is System.Reflection.Emit.AssemblyBuilder) && (Assemblé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))));
}