Megosztás a következőn keresztül:


bindingFailure MDA

Feljegyzés

Ez a cikk a .NET-keretrendszer vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.

A bindingFailure felügyelt hibakeresési segéd (MDA) akkor aktiválódik, ha egy szerelvény nem töltődik be.

Hibajelenségek

A Kód statikus hivatkozással vagy a betöltő metódusok egyikével próbált betölteni egy szerelvényt, például Assembly.Load vagy Assembly.LoadFrom. A szerelvény nincs betöltve, és a rendszer kivételt FileNotFoundException vagy FileLoadException kivételt vet ki.

Ok

Kötési hiba akkor fordul elő, ha a futtatókörnyezet nem tud betölteni egy szerelvényt. A kötési hiba az alábbi helyzetek egyikének lehet az eredménye:

  • A közös nyelvi futtatókörnyezet (CLR) nem találja a kért szerelvényt. Ennek számos oka lehet, például a nem telepített szerelvény vagy az alkalmazás nem megfelelően van konfigurálva a szerelvény megkereséséhez.

  • Gyakori probléma, hogy egy típust átad egy másik alkalmazástartománynak, ami megköveteli, hogy a CLR betöltse az adott típust tartalmazó szerelvényt a másik alkalmazástartományban. Előfordulhat, hogy a futtatókörnyezet nem tölti be a szerelvényt, ha a másik alkalmazástartomány az eredeti alkalmazástartománytól eltérően van konfigurálva. A két alkalmazástartomány például eltérő BaseDirectory tulajdonságértékekkel rendelkezhet.

  • A kért szerelvény sérült vagy nem szerelvény.

  • A szerelvényt betölteni próbáló kód nem rendelkezik a megfelelő kódhozzáférési biztonsági engedélyekkel a szerelvények betöltéséhez.

  • A felhasználói hitelesítő adatok nem adják meg a fájl olvasásához szükséges engedélyeket.

Resolution (Osztás)

Az első lépés annak meghatározása, hogy a CLR miért nem tudott csatlakozni a kért szerelvényhez. Számos oka lehet annak, hogy a futtatókörnyezet nem találta vagy nem tudta betölteni a kért szerelvényt, például az Ok szakaszban felsorolt forgatókönyveket. A kötési hiba okának megszüntetéséhez a következő műveletek ajánlottak:

  • Az ok meghatározása az MDA által bindingFailure megadott adatok használatával:

    • Futtassa a Fuslogvw.exe (szerelvénykötési naplónapló megjelenítője) a szerelvény-kötéskötő által létrehozott hibanaplók olvasásához.

    • Állapítsa meg, hogy a szerelvény a kért helyen van-e. A módszerek és LoadFile a LoadFrom módszerek esetében a kért hely könnyen meghatározható. A szerelvényidentitást használó metódus esetében Load olyan szerelvényeket kell keresnie, amelyek megfelelnek az adott identitásnak az alkalmazástartomány tulajdonságadat-mintavételi útvonalában BaseDirectory és a globális szerelvény-gyorsítótárban.

  • Az ok megoldása az előző meghatározás alapján. A lehetséges megoldási lehetőségek a következők:

    • Telepítse a kért szerelvényt a globális szerelvény-gyorsítótárban, és hívja meg a következőt: Load metódust a szerelvény identitás szerinti betöltéséhez.

    • Másolja a kért szerelvényt az alkalmazáskönyvtárba, és hívja meg a Load metódust, hogy identitás alapján töltse be a szerelvényt.

    • A tulajdonság módosításával BaseDirectory vagy privát próbaútvonalak hozzáadásával konfigurálja újra azt az alkalmazástartományt, amelyben a kötési hiba történt.

    • Módosítsa a fájl hozzáférés-vezérlési listáját, hogy a bejelentkezett felhasználó elolvashassa a fájlt.

Effektus a futtatókörnyezetre

Ez az MDA nincs hatással a CLR-re. Csak a kötési hibákra vonatkozó adatokat jelenti.

Hozam

Az MDA jelenti a be nem tölthető szerelvényt, beleértve a kért elérési utat és/vagy megjelenítendő nevet, a kötési környezetet, az alkalmazás tartományát, amelyben a terhelést kérték, valamint a hiba okát.

A megjelenített név vagy a kért elérési út üres lehet, ha az adatok nem érhetők el a CLR számára. Ha a sikertelen hívás volt a Load metódus, akkor valószínű, hogy a futtatókörnyezet nem tudta meghatározni a szerelvény megjelenítendő nevét.

Konfiguráció

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

Példa

Az alábbi példakód egy olyan helyzetet mutat be, amely aktiválhatja ezt az MDA-t:

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");
        }
    }
}

Lásd még