Sdílet prostřednictvím


bindingFailure – pomocník spravovaného ladění (MDA)

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

Pomocník bindingFailure spravovaného ladění (MDA) se aktivuje, když se sestavení nepodaří načíst.

Příznaky

Kód se pokusil načíst sestavení pomocí statického odkazu nebo jedné z metod zavaděče, například Assembly.Load nebo Assembly.LoadFrom. Sestavení není načteno a FileNotFoundException vyvolá se výjimka.FileLoadException

Příčina

K selhání vazby dochází v případě, že modul runtime nemůže načíst sestavení. Selhání vazby může být výsledkem jedné z následujících situací:

  • Modul CLR (Common Language Runtime) nemůže najít požadované sestavení. K tomu může dojít z mnoha důvodů, například k tomu, že sestavení není nainstalováno nebo aplikace není správně nakonfigurována pro vyhledání sestavení.

  • Běžným problémem je předání typu do jiné domény aplikace, což vyžaduje, aby modul CLR načetl sestavení obsahující tento typ v jiné doméně aplikace. Modul runtime nemusí být možné načíst sestavení, pokud je jiná doména aplikace nakonfigurovaná jinak než původní doména aplikace. Například dvě domény aplikace můžou mít různé BaseDirectory hodnoty vlastností.

  • Požadované sestavení je poškozené nebo není sestavení.

  • Kód, který se pokouší načíst sestavení, nemá správná oprávnění zabezpečení přístupu kódu k načtení sestavení.

  • Přihlašovací údaje uživatele neposkytují požadovaná oprávnění ke čtení souboru.

Rozlišení

Prvním krokem je určit, proč modul CLR nemohl vytvořit vazbu k požadovanému sestavení. Existuje mnoho důvodů, proč modul runtime nenašel nebo nemohl načíst požadované sestavení, například scénáře uvedené v části Příčina. K odstranění příčiny selhání vazby se doporučuje následující akce:

  • Určete příčinu pomocí dat poskytovaných bindingFailure mdA:

    • Spuštěním Fuslogvw.exe (prohlížeč protokolu vazby sestavení) přečtěte protokoly chyb vytvořených pořadačem sestavení.

    • Určete, jestli je sestavení v požadovaném umístění. V případě LoadFrom a LoadFile metod lze snadno určit požadované umístění. V případě Load metody, která vytvoří vazbu pomocí identity sestavení, musíte vyhledat sestavení, která odpovídají této identitě v cestě sondy vlastností domény BaseDirectory aplikace a globální mezipaměti sestavení.

  • Vyřešte příčinu na základě předchozího určení. Možné možnosti řešení jsou následující:

    • Nainstalujte požadované sestavení do globální mezipaměti sestavení a zavolejte ho. Load metoda pro načtení sestavení podle identity.

    • Zkopírujte požadované sestavení do adresáře aplikace a zavolejte metodu Load pro načtení sestavení podle identity.

    • Překonfigurujte doménu aplikace, ve které došlo k selhání vazby, aby zahrnovala cestu sestavení změnou BaseDirectory vlastnosti nebo přidáním privátních cest sondy.

    • Změňte seznam řízení přístupu pro soubor tak, aby přihlášený uživatel mohl soubor číst.

Vliv na modul runtime

Tento mdA nemá žádný vliv na CLR. Hlásí pouze data o selhání vazby.

Výstup

MDA hlásí sestavení, které se nepodařilo načíst, včetně požadované cesty nebo zobrazovaného názvu, kontextu vazby, domény aplikace, ve které bylo zatížení požadováno, a důvodu selhání.

Zobrazovaný název nebo požadovaná cesta mohou být prázdné, pokud tato data nebyla k dispozici modulu CLR. Pokud volání, které se nepovedlo metodě Load , pravděpodobně modul runtime nemohl určit zobrazovaný název sestavení.

Konfigurace

<mdaConfig>
  <assistants>
    <bindingFailure />
  </assistants>
</mdaConfig>

Příklad

Následující příklad kódu ukazuje situaci, která může aktivovat tuto MDA:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // This call attempts to load a nonexistent assembly.
            // The call will throw a System.IO.FileNotFound exception
            // and cause the activation of the bindingFailure MDA
            // if it is registered.
            Assembly.Load("NonExistentAssembly");
        }
    }
}

Viz také