Richtlijnen voor het maken van onderdelen voor uitvoering naast elkaar
Notitie
Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.
Volg deze algemene richtlijnen voor het maken van beheerde toepassingen of onderdelen die zijn ontworpen voor uitvoering naast elkaar:
Bind de typeidentiteit aan een bepaalde versie van een bestand.
De algemene taalruntime verbindt de typeidentiteit met een bepaalde bestandsversie met behulp van sterk benoemde assembly's. Als u een toepassing of onderdeel wilt maken voor uitvoering naast elkaar, moet u alle assembly's een sterke naam geven. Hiermee maakt u een nauwkeurige typeidentiteit en zorgt u ervoor dat elke typeomzetting wordt omgeleid naar het juiste bestand. Een sterk benoemde assembly bevat versie-, cultuur- en uitgeversgegevens die de runtime gebruikt om het juiste bestand te vinden om te voldoen aan een bindingsaanvraag.
Gebruik versiebewuste opslag.
De runtime maakt gebruik van de globale assemblycache om versiebewuste opslag te bieden. De globale assemblycache is een versiebewuste mapstructuur die is geïnstalleerd op elke computer die gebruikmaakt van .NET Framework. Assembly's die in de globale assemblycache zijn geïnstalleerd, worden niet overschreven wanneer een nieuwe versie van die assembly is geïnstalleerd.
Maak een toepassing of onderdeel dat geïsoleerd wordt uitgevoerd.
Een toepassing of onderdeel dat geïsoleerd wordt uitgevoerd, moet resources beheren om conflicten te voorkomen wanneer twee exemplaren van de toepassing of het onderdeel tegelijkertijd worden uitgevoerd. De toepassing of het onderdeel moet ook een versiespecifieke bestandsstructuur gebruiken.
Isolatie van toepassingen en onderdelen
Een van de sleutels voor het ontwerpen van een toepassing of onderdeel voor het naast elkaar uitvoeren is isolatie. De toepassing of het onderdeel moet alle resources, met name bestands-I/O, op een geïsoleerde manier beheren. Volg deze richtlijnen om ervoor te zorgen dat uw toepassing of onderdeel geïsoleerd wordt uitgevoerd:
Schrijf op een versiespecifieke manier naar het register. Sla waarden op in hives of sleutels die de versie aangeven en deel geen informatie of status in verschillende versies van een onderdeel. Hiermee voorkomt u dat twee toepassingen of onderdelen die tegelijkertijd worden uitgevoerd, informatie overschrijven.
Maak benoemde kernelobjecten versiespecifiek, zodat er geen racevoorwaarde optreedt. Een racevoorwaarde treedt bijvoorbeeld op wanneer twee semaphores van twee versies van dezelfde toepassing op elkaar wachten.
Maak versie-bewust van bestands- en mapnamen. Dit betekent dat bestandsstructuren moeten vertrouwen op versiegegevens.
Maak gebruikersaccounts en -groepen op een versiespecifieke manier. Gebruikersaccounts en groepen die door een toepassing zijn gemaakt, moeten worden geïdentificeerd met versie. Deel geen gebruikersaccounts en groepen tussen versies van een toepassing.
Versies installeren en verwijderen
Wanneer u een toepassing ontwerpt voor uitvoering naast elkaar, volgt u deze richtlijnen met betrekking tot het installeren en verwijderen van versies:
Verwijder geen gegevens uit het register die mogelijk nodig zijn voor andere toepassingen die worden uitgevoerd onder een andere versie van .NET Framework.
Vervang geen gegevens in het register die mogelijk nodig zijn voor andere toepassingen die worden uitgevoerd onder een andere versie van .NET Framework.
Maak de registratie van COM-onderdelen die mogelijk nodig zijn voor andere toepassingen die worden uitgevoerd onder een andere versie van .NET Framework, niet ongedaan maken.
Wijzig InprocServer32 of andere registervermeldingen niet voor een COM-server die al is geregistreerd.
Verwijder geen gebruikersaccounts of -groepen die mogelijk nodig zijn voor andere toepassingen die worden uitgevoerd onder een andere versie van .NET Framework.
Voeg niets toe aan het register dat een niet-geversied pad bevat.
Versienummer van bestand en assemblyversienummer
Bestandsversie is een Win32-versieresource die niet wordt gebruikt door de runtime. Over het algemeen werkt u de bestandsversie zelfs bij voor een in-place update. Twee identieke bestanden kunnen verschillende bestandsversiegegevens hebben en twee verschillende bestanden kunnen dezelfde versie-informatie hebben.
De assemblyversie wordt gebruikt door de runtime voor assemblybinding. Twee identieke assembly's met verschillende versienummers worden behandeld als twee verschillende assembly's door de runtime.
Met het hulpprogramma Global Assembly Cache (Gacutil.exe) kunt u een assembly vervangen wanneer alleen het versienummer van het bestand nieuwer is. Het installatieprogramma installeert over het algemeen niet over een assembly, tenzij het versienummer van de assembly groter is.