Il metodo di memorizzazione della coppia di chiavi dipende molto da quanto male si desidera proteggerlo da un uso indesiderato. Personalmente, memorizzo le mie chiavi in una cartella protetta dagli ACL standard (quindi chiunque riesca a ottenere l'accesso amministrativo alla mia macchina può accedere alle mie coppie di chiavi). Per me è abbastanza buono dato che le mie coppie di chiavi non sono così preziose. Microsoft consiglia di utilizzare un contenitore chiave .
Se si vuole evitare di dover sincronizzare le coppie di chiavi tra macchine, allora probabilmente è meglio se si costruisse la versione di rilascio delle librerie su una singola macchina (o sul PC o sul portatile) e si facesse quella macchina ' costruire la macchina '. In tal caso, a seconda di dove stai memorizzando la tua coppia di chiavi (in un file protetto da ACL o in un contenitore di chiavi) puoi utilizzare una di queste tecniche:
Se mantieni la coppia di chiavi in un file :
- Crea coppie di chiavi pubbliche / private per entrambi i computer. Puoi copiare la coppia di chiavi ma non è necessario, la generazione di singoli per ogni macchina è ugualmente valida.
- Su ogni macchina crea una variabile di ambiente che punta alla posizione della coppia di chiavi su quella macchina specifica. Assicurati che le variabili di ambiente abbiano lo stesso nome su entrambe le macchine.
-
Per consentire di condividere il codice tra le macchine e utilizzare ancora i file chiave specifici della macchina, aggiungi la seguente sezione al tuo file di progetto C #.
<PropertyGroup>
<SignAssembly>true</SignAssembly>
<DelaySign>false</DelaySign>
<AssemblyOriginatorKeyFile>$(YOUR_ENVIRONMENT_VARIABLE_HERE)</AssemblyOriginatorKeyFile>
</PropertyGroup>
Se vuoi che la chiave venga visualizzata nella sezione "proprietà" del progetto, puoi aggiungere la seguente sezione
<None Include="$(YOUR_ENVIRONMENT_VARIABLE_HERE)">
<Link>Properties\App.snk</Link>
</None>
Se mantieni la coppia di chiavi in un contenitore di chiavi :
- Crea coppie di chiavi pubbliche / private per entrambi i computer e memorizzale nei contenitori delle chiavi. Assicurati di utilizzare lo stesso nome per il contenitore di chiavi.
-
Per consentire di condividere il codice tra le macchine e utilizzare ancora i file chiave specifici della macchina, aggiungi la seguente sezione al tuo file di progetto C #.
<PropertyGroup>
<SignAssembly>true</SignAssembly>
<DelaySign>false</DelaySign>
<KeyContainerName>YOUR_CONTAINER_NAME_HERE</KeyContainerName>
</PropertyGroup>
In questo caso non sono sicuro di poter collegare la chiave dalla sezione "proprietà" (non sospetto).
L'utilizzo di uno di questi modi consente a MsBuild di trovare la chiave e usarla durante la compilazione, pur continuando a offrirti un modo (semi) portatile di gestire chiavi diverse su macchine diverse. Assicurati di creare sempre la versione di rilascio delle librerie sulla stessa macchina (che avrà un solo set di chiavi), altrimenti le versioni verranno rilasciate con chiavi diverse.
Per quanto riguarda l'inferno delle coppie di chiavi, l'unica cosa che non puoi fare è spostare le cartelle bin da una macchina all'altra e aspettarti che le build parziali funzionino. Se ricostruisci le librerie, non dovrebbero esserci problemi.