Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik de opdrachtregeloptie 'compiler_option' of de juiste projectinstellingen in plaats van 'attribute_name'
Als u een assembly wilt ondertekenen, moet u een sleutelbestand opgeven. Vóór C# 2.0 hebt u het sleutelbestand opgegeven met behulp van CLR-kenmerken in de broncode. Deze kenmerken zijn nu afgeschaft.
Vanaf C# 2.0 moet u de ondertekeningspagina van projectontwerper of assembly linker gebruiken om het sleutelbestand op te geven.
De ondertekeningspagina van de projectontwerper is de voorkeursmethode. Zie de ondertekeningspagina, projectontwerper en het beheren van assembly- en manifestondertekening voor meer informatie.
De procedure: onderteken een assembly met een sterke naam maakt gebruik van de volgende compileropties:
KeyFile (C#-compileropties) in plaats van het AssemblyKeyFileAttribute kenmerk.
KeyContainer (C#-compileropties) in plaats van AssemblyKeyNameAttribute.
DelaySign (C#-compileropties) in plaats van AssemblyDelaySignAttribute.
Deze kenmerken zijn om de volgende redenen afgeschaft:
Er zijn beveiligingsproblemen opgetreden vanwege de kenmerken die zijn ingesloten in de binaire bestanden die door de compiler worden geproduceerd. Iedereen die uw binaire bestand had, had ook de sleutels erin opgeslagen.
Er waren bruikbaarheidsproblemen vanwege het feit dat het pad dat is opgegeven in de kenmerken, relatief was ten opzichte van de huidige werkmap, die kon veranderen in de integrated development environment (IDE) of in de uitvoermap. De meeste keren is het sleutelbestand dus waarschijnlijk .. \\.. \\mykey.snk. Kenmerken maken het ook moeilijker voor het projectsysteem om satellietassembly's goed te ondertekenen. Wanneer u de compileropties gebruikt in plaats van deze kenmerken, kunt u een volledig gekwalificeerde pad en bestandsnaam voor de sleutel gebruiken zonder dat er iets wordt ingesloten in het uitvoerbestand; het projectsysteem en broncodebeheersysteem kunnen dat volledige pad correct manipuleren wanneer projecten worden verplaatst; het projectsysteem kan een project-relatief pad naar het sleutelbestand onderhouden en nog steeds een volledig pad naar de compiler doorgeven; andere buildprogramma's kunnen uitvoer gemakkelijker ondertekenen door het juiste pad rechtstreeks door te geven aan de compiler in plaats van een bronbestand met de juiste kenmerken te genereren.
Het gebruik van kenmerken met vriendassembly's kan de efficiëntie van de compiler belemmeren. Wanneer u kenmerken gebruikt, weet de compiler niet wat de sleutel is wanneer het moet beslissen of het vriendschap moet verlenen en dus moet worden geraden. Aan het einde van de compilatie kan de compiler de schatting controleren zodra deze de sleutel eindelijk kent. Wanneer het sleutelbestand is opgegeven met een compileroptie, kan de compiler onmiddellijk beslissen of er vriendschap moet worden verleend.
Opmerking
In het volgende voorbeeld wordt CS1699 gegenereerd. Als u de fout wilt oplossen, verwijdert u het kenmerk en compileert u met /delaysign.
// CS1699.cs
// compile with: /target:library
[assembly:System.Reflection.AssemblyDelaySign(true)] // CS1699