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


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