Schaduwkopie van assembly's
Notitie
Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.
Met schaduwkopie kunnen assembly's die in een toepassingsdomein worden gebruikt, worden bijgewerkt zonder het toepassingsdomein te verwijderen. Dit is met name handig voor toepassingen die continu beschikbaar moeten zijn, zoals ASP.NET sites.
Belangrijk
Schaduw kopiëren wordt niet ondersteund in Windows 8.x Store-apps.
De algemene taalruntime vergrendelt een assemblybestand wanneer de assembly wordt geladen, zodat het bestand pas kan worden bijgewerkt nadat de assembly is geladen. De enige manier om een assembly uit een toepassingsdomein te verwijderen, is door het toepassingsdomein te verwijderen. In normale omstandigheden kan een assembly dus niet op schijf worden bijgewerkt totdat alle toepassingsdomeinen die deze gebruiken, zijn verwijderd.
Wanneer een toepassingsdomein is geconfigureerd voor schaduwkopiebestanden, worden assembly's van het toepassingspad gekopieerd naar een andere locatie en vanaf die locatie geladen. De kopie is vergrendeld, maar het oorspronkelijke assemblybestand is ontgrendeld en kan worden bijgewerkt.
Belangrijk
De enige assembly's die schaduw kunnen worden gekopieerd, zijn assembly's die zijn opgeslagen in de toepassingsmap of de bijbehorende submappen, opgegeven door de ApplicationBase en PrivateBinPath eigenschappen wanneer het toepassingsdomein is geconfigureerd. Assembly's die zijn opgeslagen in de globale assemblycache, worden niet schaduw gekopieerd.
Dit artikel bevat de volgende secties:
Het inschakelen en gebruiken van schaduwkopie beschrijft het basisgebruik en de opties die beschikbaar zijn voor schaduwkopie.
Opstartprestaties beschrijven de wijzigingen die worden aangebracht in schaduwkopie in .NET Framework 4 om de opstartprestaties te verbeteren en hoe u kunt terugkeren naar het gedrag van eerdere versies.
Verouderde methoden beschrijven de wijzigingen die zijn aangebracht in de eigenschappen en methoden waarmee schaduwkopie in .NET Framework 2.0 wordt beheerd.
Schaduwkopie inschakelen en gebruiken
U kunt de eigenschappen van de AppDomainSetup klasse als volgt gebruiken om een toepassingsdomein te configureren voor schaduwkopie:
Schakel schaduwkopie in door de ShadowCopyFiles eigenschap in te stellen op de tekenreekswaarde
"true"
.Deze instelling zorgt er standaard voor dat alle assembly's in het toepassingspad worden gekopieerd naar een downloadcache voordat ze worden geladen. Dit is dezelfde cache die wordt onderhouden door de algemene taalruntime om bestanden op te slaan die zijn gedownload van andere computers en de algemene taalruntime verwijdert automatisch de bestanden wanneer ze niet meer nodig zijn.
Stel desgewenst een aangepaste locatie in voor schaduw gekopieerde bestanden met behulp van de CachePath eigenschap en de ApplicationName eigenschap.
Het basispad voor de locatie wordt gevormd door de ApplicationName eigenschap als submap samen te voegen naar de CachePath eigenschap. Assembly's zijn schaduw gekopieerd naar submappen van dit pad, niet naar het basispad zelf.
Notitie
Als de ApplicationName eigenschap niet is ingesteld, wordt de CachePath eigenschap genegeerd en wordt de downloadcache gebruikt. Er wordt geen uitzondering geretourneerd.
Als u een aangepaste locatie opgeeft, bent u verantwoordelijk voor het opschonen van de mappen en gekopieerde bestanden wanneer ze niet meer nodig zijn. Ze worden niet automatisch verwijderd.
Er zijn enkele redenen waarom u mogelijk een aangepaste locatie wilt instellen voor bestanden die met schaduw zijn gekopieerd. Mogelijk wilt u een aangepaste locatie instellen voor bestanden met schaduwkopieën als uw toepassing een groot aantal exemplaren genereert. De downloadcache wordt beperkt door de grootte, niet gedurende de levensduur, dus het is mogelijk dat de algemene taalruntime probeert een bestand te verwijderen dat nog steeds wordt gebruikt. Een andere reden om een aangepaste locatie in te stellen, is wanneer gebruikers die uw toepassing uitvoeren, geen schrijftoegang hebben tot de maplocatie die door de algemene taalruntime wordt gebruikt voor de downloadcache.
Beperk eventueel de assembly's die schaduw worden gekopieerd met behulp van de ShadowCopyDirectories eigenschap.
Wanneer u schaduwkopie voor een toepassingsdomein inschakelt, wordt standaard alle assembly's in het toepassingspad gekopieerd, dat wil gezegd in de mappen die zijn opgegeven door de ApplicationBase en PrivateBinPath eigenschappen. U kunt het kopiëren beperken tot geselecteerde mappen door een tekenreeks te maken die alleen de mappen bevat die u wilt schaduwkopieeren en de tekenreeks toewijzen aan de ShadowCopyDirectories eigenschap. Scheid de mappen met puntkomma's. De enige assembly's die schaduwkopieën zijn gekopieerd, zijn de assembly's in de geselecteerde mappen.
Notitie
Als u geen tekenreeks aan de ShadowCopyDirectories eigenschap toewijst of als u deze eigenschap
null
instelt op, worden alle assembly's in de mappen die zijn opgegeven door de ApplicationBase en PrivateBinPath eigenschappen schaduw gekopieerd.Belangrijk
Mappaden mogen geen puntkomma's bevatten, omdat de puntkomma het scheidingsteken is. Er is geen escapeteken voor puntkomma's.
Opstartprestaties
Wanneer een toepassingsdomein dat gebruikmaakt van schaduwkopie wordt gestart, is er een vertraging wanneer assembly's in de toepassingsmap worden gekopieerd naar de schaduwkopiemap of worden gecontroleerd of ze zich al op die locatie bevinden. Vóór .NET Framework 4 zijn alle assembly's gekopieerd naar een tijdelijke map. Elke assembly is geopend om de assemblynaam te controleren en de sterke naam is gevalideerd. Elke assembly is gecontroleerd om te zien of deze meer recent is bijgewerkt dan de kopie in de schaduwkopiemap. Zo ja, dan is deze gekopieerd naar de schaduwkopiemap. Ten slotte zijn de tijdelijke kopieën verwijderd.
Vanaf .NET Framework 4 is het standaard opstartgedrag bedoeld om de bestandsdatum en -tijd van elke assembly in de toepassingsmap rechtstreeks te vergelijken met de bestandsdatum en -tijd van de kopie in de schaduwkopiemap. Als de assembly is bijgewerkt, wordt deze gekopieerd met behulp van dezelfde procedure als in eerdere versies van .NET Framework; anders wordt de kopie in de schaduwkopiemap geladen.
De resulterende prestatieverbetering is het grootst voor toepassingen waarin assembly's niet vaak veranderen en wijzigingen meestal optreden in een kleine subset van assembly's. Als een meerderheid van de assembly's in een toepassing regelmatig wordt gewijzigd, kan het nieuwe standaardgedrag leiden tot een regressie van prestaties. U kunt het opstartgedrag van eerdere versies van .NET Framework herstellen door het element shadowCopyVerifyByTimestamp> toe te voegen aan het configuratiebestand, met enabled="false"
.<
Verouderde methoden
De AppDomain klasse heeft verschillende methoden, zoals SetShadowCopyFiles en ClearShadowCopyPath, die kunnen worden gebruikt voor het beheren van schaduwkopie op een toepassingsdomein, maar deze zijn gemarkeerd als verouderd in .NET Framework versie 2.0. De aanbevolen manier om een toepassingsdomein te configureren voor schaduwkopie is door de eigenschappen van de AppDomainSetup klasse te gebruiken.