0

该文件存在,名称正确且未损坏。如果我将它从“Bin”中移出并移回,它会再次工作,大约 5 分钟,然后出现下面的错误。任何刷新文件的操作都可以,重新发布它,重命名或移动会使站点再次工作,片刻。

{“消息”:“无法加载文件或程序集 \u0027Ouranos,版本=1.0.0.0,Culture=fr-CA,PublicKeyToken=null\u0027 或其依赖项之一。Le fichier spécifié est introuvable。”,“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 Itérations)","ExceptionType" :“系统.IO。”}

Fusion 确实给了我一个错误代码 (0x80070002),它指出我需要获取 Process Monitor。这将我带到临时程序集文件夹。现在我可能错了。比较健康网站和生病网站的缓存文件,我发现有些奇怪。

  • 健康的网站作为缓存中的 BIN 中的所有 DLL。
  • 生病的网站在 BIN 中的缓存中缺少两个 DLL。

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

两个罪魁祸首是:

  • PresentationCore.dll
  • WindowsBase.dll
4

2 回答 2

0

要解决这种错误,您可以使用 Fusion 日志,有关如何启用它以及如何使用它的说明可以在此处找到:如何在 .NET 中启用程序集绑定失败日志记录 (Fusion)

于 2012-09-17T22:53:39.560 回答
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))));
}
于 2012-10-07T08:44:50.067 回答