Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Megjegyzés:
Ez a cikk a .NET-keretrendszerre vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.
Az egymás melletti végrehajtás lehetővé teszi egy alkalmazás vagy összetevő több verziójának futtatását ugyanazon a számítógépen. A közös nyelvi futtatókörnyezet több verziójával, valamint a futtatókörnyezetet használó alkalmazások és összetevők több verziójával is rendelkezhet ugyanazon a számítógépen egyszerre.
Az alábbi ábrán több alkalmazás látható, amelyek ugyanazon a számítógépen a futtatókörnyezet két különböző verzióját használják. Az A, B és C alkalmazások a futtatókörnyezet 1.0-s verzióját használják, míg a D alkalmazás az 1.1-es futtatókörnyezetet használja.
A .NET-keretrendszer a közös nyelvi futtatókörnyezetből és az API-típusokat tartalmazó szerelvények gyűjteményéből áll. A futtatókörnyezet és a .NET-keretrendszer szerelvények külön verziószámozottak. A futtatókörnyezet 4.0-s verziója például valójában a 4.0.319-es verzió, míg a .NET-keretrendszer szerelvények 1.0-s verziója az 1.0.3300.0-s verzió.
Az alábbi ábrán több alkalmazás látható, amelyek egy összetevő két különböző verzióját használják ugyanazon a számítógépen. Az A és a B alkalmazás az összetevő 1.0-s verzióját használja, míg a C alkalmazás ugyanazon összetevő 2.0-s verzióját használja.
Az egymás melletti végrehajtással jobban szabályozhatja, hogy az adott összetevő mely verzióihoz csatlakozik az alkalmazás, és jobban szabályozhatja, hogy az alkalmazás melyik futtatókörnyezetet használja.
Az egymás melletti végrehajtás előnyei
A Windows XP és a .NET-keretrendszer előtt DLL-ütközések történtek, mert az alkalmazások nem tudtak különbséget tenni ugyanazon kód nem kompatibilis verziói között. A DLL-ben található típusinformációk csak egy fájlnévhez kötötték. Az alkalmazások nem tudhatták, hogy a DLL-ben található típusok megegyeznek-e az alkalmazás által készített típusokkal. Ennek eredményeképpen egy összetevő új verziója felülírhat egy régebbi verziót, és megszakíthatja az alkalmazásokat.
Az egymás melletti végrehajtás és a .NET-keretrendszer az alábbi funkciókat biztosítja a DLL-ütközések kiküszöböléséhez:
Erős nevű egységek.
Egymás melletti végrehajtás erős nevű szerelvények használatával köti össze a típusinformációkat egy szerelvény egy adott verziójával. Ez megakadályozza, hogy egy alkalmazás vagy összetevő egy szerelvény érvénytelen verziójához kötődjön. Az erős nevű assemblyk lehetővé teszik, hogy egy fájl több verziója létezzen ugyanazon a számítógépen, és ezeket az alkalmazások használhatják. További információ: Strong-Named szerelvények.
Verzióérzékeny kódtároló.
A .NET-keretrendszer verzióérzékeny kódtárolót biztosít a központi gyűjteménytárban. A globális összeállítási gyorsítótár egy kódgyorsítótár, amely a számítógép szintjén működik, és a .NET-keretrendszerrel rendelkező összes számítógépen megtalálható. Az összeállításokat a verzió, kulturális és a közzétevő adatai alapján tárolja, és támogatja az összetevők és alkalmazások több verzióját. További információ: Globális assembly tároló.
Izoláció.
A .NET-keretrendszer használatával külön-külön végrehajtható alkalmazásokat és összetevőket hozhat létre. Az elkülönítés az egymás melletti végrehajtás alapvető összetevője. Ez magában foglalja, hogy tisztában van a használt erőforrásokkal, és magabiztosan oszt meg erőforrásokat egy alkalmazás vagy összetevő több verziója között. Az elkülönítés magában foglalja a fájlok verzióspecifikus tárolását is. Az elkülönítéssel kapcsolatos további információkért tekintse meg az összetevők egymás melletti végrehajtáshoz való létrehozásának irányelveit.
Verziókompatibilitás
A .NET-keretrendszer 1.0-s és 1.1-s verziói kompatibilisek egymással. A .NET-keretrendszer 1.0-s verziójával készült alkalmazásoknak az 1.1-es verzión kell futniuk, a .NET-keretrendszer 1.1-es verziójával készült alkalmazásnak pedig az 1.0-s verzión kell futnia. Vegye figyelembe azonban, hogy a .NET-keretrendszer 1.1-es verziójában hozzáadott API-funkciók nem működnek a .NET-keretrendszer 1.0-s verziójával. A 2.0-s verzióval létrehozott alkalmazások csak a 2.0-s verzióban fognak futni. A 2.0-s verziójú alkalmazások nem fognak futni az 1.1-es vagy korábbi verzióban.
A .NET-keretrendszer verziói egyetlen egységként vannak kezelve, amely a futtatókörnyezetből és a hozzá tartozó .NET-keretrendszer-szerelvényekből (a szerelvény-egyesítésnek nevezett fogalomból) áll. A szerelvénykötést átirányíthatja a .NET-keretrendszer-szerelvények más verzióira is, de az alapértelmezett szerelvénykötés felülírása kockázatos lehet, és az üzembe helyezés előtt szigorúan tesztelni kell.
Futtatókörnyezet verzióadatainak keresése
Az alkalmazás vagy összetevő futtatókörnyezeti verziójával kapcsolatos információk, valamint az alkalmazás futtatásához szükséges futtatókörnyezeti verziók két helyen vannak tárolva. Egy alkalmazás vagy összetevő lefordításakor a fordításhoz használt futtatókörnyezeti verzióra vonatkozó információk a felügyelt végrehajtható fájlban lesznek tárolva. Az alkalmazás vagy összetevő által igényelt futtatókörnyezeti verziókra vonatkozó információkat az alkalmazáskonfigurációs fájl tárolja.
Futtatókörnyezet verzióadatai a felügyelt végrehajtható fájlban
Az egyes felügyelt alkalmazások és összetevők hordozható végrehajtható (PE) fájlfejléce információkat tartalmaz arról a futtatókörnyezeti verzióról, amellyel készült. A közös nyelvi futtatókörnyezet ezeket az információkat használja annak a futtatókörnyezetnek a legvalószínűbb verziójának meghatározásához, amelyet az alkalmazásnak futtatnia kell.
Futtatókörnyezet verzióadatai az alkalmazáskonfigurációs fájlban
A PE-fájlfejlécben található információk mellett az alkalmazás üzembe helyezhető egy olyan alkalmazáskonfigurációs fájllal is, amely a futtatókörnyezet verzióadatait tartalmazza. Az alkalmazáskonfigurációs fájl egy XML-alapú fájl, amelyet az alkalmazás fejlesztője hoz létre, és amely egy alkalmazással rendelkezik. A <requiredRuntime> szakasz eleme, ha jelen van ebben a <startup>fájlban, meghatározza, hogy a futtatókörnyezet mely verzióit és az alkalmazás által támogatott összetevő mely verzióit támogatja. Ezzel a fájllal tesztelheti azt is, hogy az alkalmazás kompatibilis-e a futtatókörnyezet különböző verzióival.
A nem felügyelt kód, beleértve a COM és COM+ alkalmazásokat, rendelkezhet olyan alkalmazáskonfigurációs fájlokkal, amelyeket a futtatókörnyezet a felügyelt kód használatához használ. Az alkalmazáskonfigurációs fájl hatással van minden olyan felügyelt kódra, amelyet a COM-on keresztül aktivál. A fájl megadhatja, hogy mely futtatókörnyezeti verziókat támogatja, valamint szerelvény-átirányításokat. Alapértelmezés szerint a com-beli, felügyelt kódra hívó interop-alkalmazások a számítógépre telepített futtatókörnyezet legújabb verzióját használják.
Az alkalmazáskonfigurációs fájlokról további információt az Alkalmazások konfigurálása című témakörben talál.
A betöltendő futtatókörnyezet melyik verziójának meghatározása
A közös nyelvi futtatókörnyezet az alábbi információk alapján határozza meg, hogy a futtatókörnyezet melyik verzióját töltse be egy alkalmazás:
Az elérhető futtatókörnyezeti verziók.
Az alkalmazások által támogatott futtatókörnyezeti verziók.
Támogatott futtatókörnyezeti verziók
A futtatókörnyezet az alkalmazás konfigurációs fájlját és a hordozható végrehajtható (PE) fájlfejlécet használja annak meghatározásához, hogy az alkalmazás melyik futtatókörnyezetet támogatja. Ha nincs alkalmazáskonfigurációs fájl, a futtatókörnyezet betölti az alkalmazás PE-fájlfejlécében megadott futtatókörnyezeti verziót, ha ez a verzió elérhető.
Ha egy alkalmazáskonfigurációs fájl található, a futtatókörnyezet a következő folyamat eredményei alapján határozza meg a megfelelő futtatókörnyezeti verziót:
A futtatókörnyezet megvizsgálja az
<supportedRuntime>alkalmazáskonfigurációs fájl Elem elemét. Ha az elemben<supportedRuntime>megadott támogatott futtatókörnyezet-verziók közül legalább egy megtalálható, a futtatókörnyezet betölti az első<supportedRuntime>elem által megadott futtatókörnyezeti verziót. Ha ez a verzió nem érhető el, a futtatókörnyezet megvizsgálja a következő<supportedRuntime>elemet, és megpróbálja betölteni a megadott futtatókörnyezeti verziót. Ha ez a futtatókörnyezeti verzió nem érhető el, a rendszer megvizsgálja a további<supportedRuntime>elemeket. Ha egyik támogatott futtatókörnyezeti verzió sem érhető el, a futtatókörnyezet nem tölt be egy futtatókörnyezeti verziót, és üzenetet jelenít meg a felhasználónak (lásd a 3. lépést).A futtatókörnyezet beolvassa az alkalmazás végrehajtható fájljának PE-fájlfejlécét. Ha a PE-fájlfejléc által megadott futtatókörnyezeti verzió elérhető, a futtatókörnyezet betölti ezt a verziót. Ha a megadott futtatókörnyezeti verzió nem érhető el, a futtatókörnyezet olyan futtatókörnyezeti verziót keres, amelyet a Microsoft úgy határoz meg, hogy kompatibilis legyen a PE fejlécben található futtatókörnyezeti verzióval. Ha ez a verzió nem található, a folyamat a 3. lépésben folytatódik.
A futtatókörnyezet egy üzenetben jelzi, hogy az alkalmazás által támogatott futtatókörnyezet verziója nem érhető el. A futtatókörnyezet nincs betöltve.
Megjegyzés:
Az üzenet megjelenítését letilthatja a NoGuiFromShim érték használatával a HKLM\Software\Microsoft\.NETFramework beállításkulcs alatt, vagy a COMPLUS_NoGuiFromShim környezeti változóval. Letilthatja például az olyan alkalmazások üzenetét, amelyek általában nem kommunikálnak a felhasználóval, például felügyelet nélküli telepítések vagy Windows-szolgáltatások. Amikor az üzenet megjelenítése el van nyomva, a futtatókörnyezet üzenetet ír az eseménynaplóba. Állítsa a NoGuiFromShim beállításjegyzék-értéket 1 értékre az üzenet letiltásához a számítógépen található összes alkalmazás esetében. Másik lehetőségként állítsa a COMPLUS_NoGuiFromShim környezeti változót 1-re, hogy letiltsa az adott felhasználói környezetben futó alkalmazások üzenetét.
Megjegyzés:
A futtatási környezet verziójának betöltése után a szerelvénykötés-átirányítások megadhatják, hogy egy egyedi .NET-keretrendszer szerelvény másik verziója töltődjön be. Ezek a kötésátirányítások csak az átirányított szerelvényre vannak hatással.
Részben minősített szerelvénynevek és egymás melletti végrehajtás
Mivel ezek az egymás melletti problémák lehetséges forrásai, a részlegesen minősített szerelvényhivatkozások csak az alkalmazáskönyvtárban lévő szerelvényekhez való kötéshez használhatók. Ne használjon részben minősített szerelvény-hivatkozásokat a kódban.
A kód részben minősített szerelvényhivatkozásainak csökkentése érdekében az alkalmazáskonfigurációs fájl qualifyAssembly< elemével teljes mértékben minősítheti a kódban előforduló részlegesen minősített szerelvényhivatkozásokat.>
<qualifyAssembly> Az elem használatával csak olyan mezőket adhat meg, amelyek nincsenek beállítva a részleges hivatkozásban. Az attribútumban fullName felsorolt szerelvényidentitásnak tartalmaznia kell a szerelvény nevének teljes minősítéséhez szükséges összes információt: szerelvény nevét, nyilvános kulcsát, kultúráját és verzióját.
Az alábbi példa az alkalmazáskonfigurációs fájlbejegyzésben mutatja, hogyan kell teljesen minősíteni egy myAssembly nevű szerelvényt.
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="myAssembly"
fullName="myAssembly,
version=1.0.0.0,
publicKeyToken=...,
culture=neutral"/>
</assemblyBinding>
Amikor egy szerelvénybetöltési utasítás hivatkozik myAssembly, ezek a konfigurációs fájlbeállítások miatt a futtatókörnyezet automatikusan lefordítja a részben minősített myAssembly hivatkozást egy teljesen minősített hivatkozásra. A Assembly.Load("myAssembly") például Assembly.Load("myAssembly, version=1.0.0.0, publicKeyToken=..., culture=neutral") lesz.
Megjegyzés:
Ezzel a LoadWithPartialName módszerrel megkerülheti a közös nyelvi futásidejű korlátozást, amely megakadályozza a részben hivatkozott szerelvények betöltését a globális szerelvény-gyorsítótárból. Ezt a módszert csak távoli elérési forgatókönyvekben ajánlott használni, mivel könnyen problémákat okozhat párhuzamos végrehajtás során.
Kapcsolódó témakörök
| Cím | Leírás |
|---|---|
| Útmutató: Automatikus kötésátirányítás engedélyezése és letiltása | Azt ismerteti, hogyan köthet egy alkalmazást egy szerelvény egy adott verziójához. |
| Szerelvénykötés átirányításának konfigurálása | Ez a cikk bemutatja, hogyan irányíthatja át a szerelvénykötési hivatkozásokat a .NET-keretrendszer szerelvények egy adott verziójára. |
| In-Process egymás melletti végrehajtás | Bemutatja, hogyan használhatja a párhuzamos futtatókörnyezet aktiválását a CLR több verziójának egyetlen folyamatban való futtatásához. |
| Szerelvények a .NET-ben | Elméleti áttekintést nyújt a szerelvényekről. |
| Alkalmazástartományok | Elméleti áttekintést nyújt az alkalmazástartományokról. |