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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: