Condividi tramite


Nomi sicuri

Per risolvere il problema sopra descritto, associare in modo più stretto una build distinta di un assembly di componenti all'applicazione client. Questa build distinta viene identificata dalla combinazione di un numero di versione con un valore speciale, definito chiave di creazione. Questi assembly di componenti potranno quindi essere isolati dal sistema, in modo che sia possibile eseguire contemporaneamente versioni diverse per diverse applicazioni, operazione che non era possibile effettuare in passato. Questo sistema di protezione viene a volte definito esecuzione affiancata (al contrario dell'esecuzione compatibile con la versione precedente), perché le applicazioni possono essere eseguite contemporaneamente insieme ad altre versioni della stessa applicazione senza influire sul rispettivo ambiente di esecuzione.

Nella sottodirectory 4_Shared è disponibile il codice che illustra come si aggiungono questi ulteriori attributi di generazione e come si crea un componente condivisibile protetto. Sulla base del codice disponibile in 3_SimplePath, con questo passaggio viene aggiunto un secondo componente condivisibile che inverte una matrice di stringhe.

Verrà innanzitutto generato un assembly di componenti senza specificare alcuna opzione per renderlo condivisibile. Se si compila semplicemente il nuovo componente Reverser.dll utilizzando ad esempio BuildNoShare.bat, che si trova nella sottodirectory \4_Shared\, sarà possibile esaminare i metadati utilizzando Ildasm.exe, dal quale risulterà che nell'assembly manca una chiave di creazione e che non è stato stabilito un numero di versione:

.assembly Reverser
{  ...
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}

Per contrassegnare un assembly come condivisibile, è necessario compilarlo utilizzando una chiave privata. Le chiavi pubbliche vengono utilizzate per la verifica. Prima di procedere alla compilazione è quindi necessario generare una coppia di chiavi pubblica-privata. Per generare una nuova coppia di chiavi e inserirla in un file, che si trova nella sottodirectory \4_Shared\Reverser, è necessario utilizzare lo strumento Nome sicuro (Sn.exe):

sn –k orgKey.snk

Una volta creata la chiave privata, è possibile compilare il componente, specificando il file di chiave e il numero di versione assegnato. Per eseguire questa operazione specificare gli attributi AssemblyVersion e AssemblyKeyFile nel file Reverser.cs utilizzando il simbolo di compilazione condizionale STRONG:

#if STRONG
[assembly: System.Reflection.AssemblyVersion("1.0.0.0")]
[assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")]
#endif

Sarà quindi necessario definire STRONG nel processo di compilazione:

csc.exe /define:STRONG ... Reverser.cs

Se si esegue di nuovo Ildasm.exe su Reverser.dll, si potrà verificare che l'assembly è ora condivisibile, come è rilevabile dalla presenza di una proprietà .publickey e di una proprietà .ver che non contiene il valore predefinito 1.0.0.0:

.assembly Reverser
{  ...
  .publickey = (00 ... FC 4A DC 9B 9C)
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}

Per ulteriori informazioni sullo strumento Nome sicuro (Sn.exe), vedere la sezione relativa a questa utilità nell'Appendice B: strumenti per la creazione di package e la distribuzione in questa esercitazione.

Vedere anche

Distribuzione di componenti condivisi | (5) Controllo delle versioni dei componenti | Riepilogo della distribuzione di package | Appendice A: ulteriori informazioni sulla creazione di package e sulla distribuzione | Appendice B: strumenti per la creazione di package e per la distribuzione