Szerelvényverziók átirányítása
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 fordítási idő kötési hivatkozásait átirányíthatja .NET-keretrendszer szerelvényekre, külső szerelvényekre vagy saját alkalmazásszerelvényekre. Az alkalmazást többféleképpen is átirányíthatja egy szerelvény egy másik verziójának használatára: közzétevői szabályzaton keresztül, alkalmazáskonfigurációs fájlon keresztül; vagy a gép konfigurációs fájljának segítségével. Ez a cikk bemutatja, hogyan működik a szerelvénykötés .NET-keretrendszer és hogyan konfigurálható.
Tipp.
Ez a cikk .NET-keretrendszer alkalmazásokra vonatkozik. A .NET 5+ (és a .NET Core) szerelvénybetöltéséről további információt a .NET-ben található függőségbetöltés című témakörben talál.
Szerelvény-egyesítés és alapértelmezett kötés
A .NET-keretrendszer szerelvények kötéseit néha egy szerelvényegyesítésnek nevezett folyamat irányítja át. A .NET-keretrendszer a közös nyelvi futtatókörnyezet egy verziójából és a típustárat alkotó mintegy két tucat .NET-keretrendszer szerelvényekből áll. Ezeket a .NET-keretrendszer szerelvényeket a futtatókörnyezet egyetlen egységként kezeli. Alapértelmezés szerint egy alkalmazás indításakor a futtatókörnyezet által futtatott kódtípusokra mutató összes hivatkozás .NET-keretrendszer olyan szerelvényekre irányul, amelyek verziószáma megegyezik a folyamatba betöltött futtatókörnyezetével. A modellben előforduló átirányítások a futtatókörnyezet alapértelmezett viselkedési módjai.
Ha például az alkalmazás a System.XML névtérben található típusokra hivatkozik, és a .NET-keretrendszer 4.5 használatával készült, akkor a 4.5-ös futtatókörnyezettel rendelkező System.XML szerelvényre mutató statikus hivatkozásokat tartalmaz. Ha a kötéshivatkozást a .NET-keretrendszer 4-et tartalmazó System.XML szerelvényre szeretné átirányítani, az átirányítási információkat az alkalmazás konfigurációs fájljában helyezheti el. Az egyesített .NET-keretrendszer-szerelvény konfigurációs fájljában lévő kötésátirányítás megszakítja az adott szerelvény egyesítését.
Emellett érdemes lehet manuálisan átirányítani a szerelvénykötést külső szerelvényekhez, ha több verzió is elérhető.
Verziók átirányítása közzétevői szabályzat használatával
A szerelvények szállítói az alkalmazásokat egy szerelvény újabb verziójára irányíthatják úgy, hogy belevesznek egy közzétevői szabályzatfájlt az új szerelvénybe. A közzétevő házirendfájlja, amely a globális szerelvény-gyorsítótárban található, szerelvény-átirányítási beállításokat tartalmaz.
Mindegyik szakon.a szerelvény alverziója saját közzétevői szabályzatfájllal rendelkezik. A 2.0.2.222-es verzióról a 2.0.3.000-es verzióra és a 2.0.2.321-es verzióról a 2.0.3.000-es verzióra való átirányítások például ugyanabba a fájlba kerülnek, mert a 2.0-s verzióhoz vannak társítva. A 3.0.0.999-es verzióról a 4.0.0.000-es verzióra való átirányítás azonban a 3.0.999-es verzió fájljába kerül. A .NET-keretrendszer minden főverziója saját közzétevői szabályzatfájllal rendelkezik.
Ha létezik közzétevői szabályzatfájl egy szerelvényhez, a futtatókörnyezet a szerelvény jegyzék- és alkalmazáskonfigurációs fájljának ellenőrzése után ellenőrzi ezt a fájlt. A szállítók csak akkor használhatnak közzétevői szabályzatfájlokat, ha az új szerelvény visszamenőlegesen kompatibilis az átirányított szerelvénysel.
Az alkalmazás közzétevői házirendjének megkerüléséhez adja meg az alkalmazás konfigurációs fájljában található beállításokat, ahogyan az a közzétételi szabályzat megkerülése című szakaszban is szerepel.
Verziók átirányítása az alkalmazás szintjén
Az alkalmazás kötési viselkedésének az alkalmazás konfigurációs fájlon keresztüli módosítására többféle módszer is létezik: manuálisan szerkesztheti a fájlt, automatikus kötésátirányításra támaszkodhat, vagy megadhatja a kötés viselkedését a közzétevői szabályzat megkerülésével.
Az alkalmazáskonfigurációs fájl manuális szerkesztése
Az alkalmazáskonfigurációs fájl manuális szerkesztésével megoldhatja a szerelvényekkel kapcsolatos problémákat. Ha például egy gyártó kiadhat egy olyan szerelvény újabb verzióját, amelyet az alkalmazás közzétevői szabályzat megadása nélkül használ, mert nem garantálják a visszamenőleges kompatibilitást, az alkalmazást a szerelvény újabb verziójának használatára irányíthatja úgy, hogy az alkalmazás konfigurációs fájljában az alábbiak szerint szerelvénykötési információkat helyez el.
<dependentAssembly>
<assemblyIdentity name="someAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
Automatikus kötésátirányítás használata
Amikor olyan asztali alkalmazást hoz létre a Visual Studióban, amely .NET-keretrendszer 4.5.1-es vagy újabb verzióját célozza meg, az alkalmazás automatikus kötésátirányítást használ. Ez azt jelenti, hogy ha két összetevő ugyanazon erős nevű szerelvény különböző verzióira hivatkozik, a futtatókörnyezet automatikusan hozzáad egy kötésátirányítást a szerelvény újabb verziójához a kimeneti alkalmazás konfigurációs (app.config) fájljában. Ez az átirányítás felülbírálja a szerelvény egyesítését, amely egyébként megtörténhet. A forrásalkalmazás.config fájl nincs módosítva. Tegyük fel például, hogy az alkalmazás közvetlenül egy sávon kívüli .NET-keretrendszer összetevőre hivatkozik, de egy külső erőforrástárat használ, amely ugyanannak az összetevőnek egy régebbi verzióját célozza meg. Az alkalmazás lefordításakor a kimeneti alkalmazás konfigurációs fájlja úgy módosul, hogy az az összetevő újabb verziójára történő kötésátirányítást tartalmazzon. Ha webalkalmazást hoz létre, egy összeállítási figyelmeztetést kap a kötésütközésről, amely lehetővé teszi a szükséges kötésátirányítás hozzáadását a forrás webkonfigurációs fájlhoz.
Ha manuálisan ad hozzá kötésátirányításokat a forrásalkalmazás.config fájlhoz, fordításkor a Visual Studio megpróbálja egyesíteni a szerelvényeket a hozzáadott kötésátirányítások alapján. Tegyük fel például, hogy beszúrja a következő kötési átirányítást egy szerelvényhez:
<bindingRedirect oldVersion="3.0.0.0" newVersion="2.0.0.0" />
Ha az alkalmazás egy másik projektje ugyanannak a szerelvénynek az 1.0.0.0-s verziójára hivatkozik, az automatikus kötésátirányítás hozzáadja a következő bejegyzést a kimeneti app.config fájlhoz, hogy az alkalmazás egységes legyen a szerelvény 2.0.0.0-s verziójában:
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
Engedélyezheti az automatikus kötésátirányítást, ha az alkalmazás a .NET-keretrendszer régebbi verzióit célozza meg. Ezt az alapértelmezett viselkedést felülbírálhatja úgy, hogy az app.config fájlban kötelező átirányítási információkat ad meg bármely szerelvényhez, vagy kikapcsolja a kötésátirányítási funkciót. A funkció be- és kikapcsolásával kapcsolatos információkért lásd : Útmutató: Automatikus kötésátirányítás engedélyezése és letiltása.
Közzétevői szabályzat megkerülése
Szükség esetén felülbírálhatja a közzétevői szabályzatot az alkalmazáskonfigurációs fájlban. A visszafelé kompatibilis szerelvények új verziói például továbbra is megszakíthatják az alkalmazást. Ha meg szeretné kerülni a közzétevői szabályzatot, adjon hozzá egy <publisherPolicy> elemet az< alkalmazáskonfigurációs fájl dependAssembly> eleméhez, és állítsa az apply attribútumot nemre, ami felülírja a korábbi igen beállításokat.
<publisherPolicy apply="no" />
Megkerülheti a közzétevői szabályzatot, hogy az alkalmazás továbbra is működjön a felhasználók számára, de győződjön meg arról, hogy a problémát a szerelvény gyártójának jelenti. Ha egy szerelvény közzétevői szabályzatfájllal rendelkezik, a gyártónak gondoskodnia kell arról, hogy a szerelvény visszamenőlegesen kompatibilis legyen, és hogy az ügyfelek a lehető legnagyobb mértékben használják az új verziót.
Verziók átirányítása a gép szintjén
Ritkán fordul elő, hogy egy számítógép rendszergazdája azt szeretné, hogy a számítógépen lévő összes alkalmazás egy szerelvény egy adott verzióját használja. Egy adott verzió például kijavíthat egy biztonsági rést. Ha a rendszer átirányít egy szerelvényt a gép konfigurációs fájljában( machine.config), a rendszer a régi verziót használó összes alkalmazást az új verzió használatára irányítja. A gép konfigurációs fájlja felülírja az alkalmazáskonfigurációs fájlt és a közzétevői házirendfájlt. Ez a machine.config fájl a következő helyen található: %windir%\Microsoft.NET\Framework[version]\config\machine.config 32 bites gépekhez, vagy %windir%\Microsoft.NET\Framework64[verzió]\config\machine.config 64 bites gépekhez.
Szerelvénykötés megadása konfigurációs fájlokban
Ugyanazt az XML-formátumot használja a kötésátirányítások megadásához, legyen szó az alkalmazáskonfigurációs fájlról, a gép konfigurációs fájljáról vagy a közzétevő házirendfájljáról. Az egyik szerelvényverzió egy másikra való átirányításához használja a <bindingRedirect> elemet. Az oldVersion attribútum egyetlen szerelvényverziót vagy verziótartományt adhat meg. Az newVersion
attribútumnak egyetlen verziót kell megadnia. Megadja például, <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/>
hogy a futtatókörnyezet az 1.1.0.0 és 1.2.0.0 közötti szerelvényverzió helyett a 2.0.0.0-s verziót használja.
Az alábbi példakód számos különböző kötésátirányítási forgatókönyvet mutat be. A példa egy átirányítást ad meg a verziótartományhoz myAssembly
, és egyetlen kötési átirányítást a következőhöz mySecondAssembly
: . A példa azt is meghatározza, hogy a közzétevő házirendfájlja nem fogja felülbírálni a kötés átirányításait myThirdAssembly
.
Szerelvény kötéséhez meg kell adnia az "urn:schemas-microsoft-com:asm.v1" sztringet az xmlns attribútummal a <assemblyBinding> címkében.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<!-- Assembly versions can be redirected in app,
publisher policy, or machine configuration files. -->
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="mySecondAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="myThirdAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<!-- Publisher policy can be set only in the app
configuration file. -->
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Szerelvénykötések korlátozása egy adott verzióra
Az alkalmazáskonfigurációs fájl assemblyBinding> elemének< aPpliesTo attribútumával átirányíthatja a szerelvénykötési hivatkozásokat a .NET-keretrendszer egy adott verziójára. Ez az opcionális attribútum egy .NET-keretrendszer verziószámot használ annak jelzésére, hogy melyik verzióra vonatkozik. Ha nincs megadva appliesTo attribútum, a <assemblyBinding> elem a .NET-keretrendszer minden verziójára vonatkozik.
Ha például szerelvénykötést szeretne átirányítani egy .NET-keretrendszer 3.5-ös szerelvényhez, az alkalmazáskonfigurációs fájlban a következő XML-kódot kell tartalmaznia.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"
appliesTo="v3.5">
<dependentAssembly>
<!-- assembly information goes here -->
</dependentAssembly>
</assemblyBinding>
</runtime>
Az átirányítási adatokat verziórendben kell megadnia. Adja meg például a szerelvénykötés átirányítási adatait .NET-keretrendszer 3.5-ös szerelvényekhez, majd .NET-keretrendszer 4.5 szerelvényekhez. Végül adja meg a szerelvénykötés átirányítási adatait minden olyan .NET-keretrendszer szerelvény-átirányításhoz, amely nem használja az appliesTo attribútumot, és ezért a .NET-keretrendszer minden verziójára vonatkozik. Ha ütközés van az átirányításban, a rendszer a konfigurációs fájl első egyező átirányítási utasítását használja.
Ha például egy hivatkozást egy .NET-keretrendszer 3.5-ös szerelvényre, egy másikat pedig egy .NET-keretrendszer 4-szerelvényre szeretne átirányítani, használja az alábbi pszeudokódban látható mintát.
<assemblyBinding xmlns="..." appliesTo="v3.5 ">
<!--.NET Framework version 3.5 redirects here -->
</assemblyBinding>
<assemblyBinding xmlns="..." appliesTo="v4.0.30319">
<!--.NET Framework version 4.0 redirects here -->
</assemblyBinding>
<assemblyBinding xmlns="...">
<!-- redirects meant for all versions of the runtime -->
</assemblyBinding>
Lásd még
- Útmutató: Automatikus kötésátirányítás engedélyezése és letiltása
- <bindingRedirect> elem
- Szerelvénykötés átirányításának biztonsági engedélye
- Szerelvények a .NET-ben
- Programozás szerelvényekkel
- Hogyan találja meg a futtatókörnyezet az szerelvényeket?
- Alkalmazások konfigurálása
- Futtatókörnyezet beállításainak sémája
- Konfigurációs fájlséma
- Útmutató: Közzétevői szabályzat létrehozása