2009-06-29 9 views
19

Sto provando a configurare una build di integrazione continua su TFS 2008. Nel progetto che voglio costruire, utilizzo una chiave per la firma. Questa chiave utilizza una password. Non riesco a farlo compilare, perché durante la compilazione TFS vuole mostrare una finestra di dialogo che non può essere mostrata. Penso di aver bisogno di costruire il progetto a mano sul server, ma solo il TFS explorer e le parti di costruzione sono installati sul server. Qualche suggerimento su come realizzare correttamente il mio progetto?Team Foundation Server Creazione con codifica protetta da password fallita

Questo è l'errore data dal TFS:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets (1805,7): errore MSB4018: The " ResolveKeySource "L'attività non è riuscita in modo imprevisto. System.InvalidOperationException: Visualizzazione di una finestra di dialogo modale o di un modulo quando l'applicazione non è in esecuzione in UserInteractive mode non è un'operazione valida . Specificare lo ServiceNotification o lo DefaultDesktopSolo stile per visualizzare una notifica da un'applicazione del servizio . a System.Windows.Forms.Form.ShowDialog (IWin32Window proprietario) a System.Windows.Forms.Form.ShowDialog() a Microsoft.Build.Tasks.ResolveKeySource.ResolveAssemblyKey() a Microsoft.Build. Tasks.ResolveKeySource.Execute()

risposta

34

Questo blog post sotto i particolari la procedura esatta

Setup Key Files

Creare una coppia di chiavi privata/pubblica protetta da password (KeyPair.pfx) utilizzando la scheda "Firma" di Visual Studio all'interno delle proprietà di un progetto Estrarre la chiave pubblica dalla coppia di chiavi e copiarla in un file separato (Key.snk) sn.exe -p KeyPair.pfx Key.snk

Copia KeyPair.pfx sul server di build. Io uso C: \ Programmi \ MSBuild \ KeyFile.pfx, perché può accedere alla proprietà MSBuild $ (MSBuildExtensionsPath). Spostare il file KeyPair.pfx in una posizione sicura protetta &. Mantieni anche la password segreta. Copia Key.snk in una posizione condivisa a cui gli sviluppatori possono accedervi. Progetti di installazione per la firma

Per ogni gruppo che si desidera firmare:

  1. Aprire le proprietà del progetto | Pagina di firma
  2. Selezionare la casella di controllo [X] Firma il gruppo.
  3. Selezionare la casella di controllo [X] Solo ritardo.
  4. Selezionare dal menu a discesa file chiave.
  5. Passare al percorso condiviso e selezionare la chiave.SNK presentare
  6. Il file SNK verrà copiato ogni cartella di progetto che si assegna a
  7. Copiare il file di chiave da uno dei vostri progetti in una soluzione di elementi in modo che si può utilizzare per la configurazione di prova

Setup Esecuzione test di configurazione per re-signing

Se volete strumento gli assembly e consentire la copertura di codice per il test di unità, allora avete bisogno di specificare un file di chiave per la ri-firma.

Aprire il file LocalTestRun.testrunconfig Nella scheda Code Coverage, selezionare il tasto del file chiave re-signing

Disabilita con nome di verifica sulle workstation sviluppatori

Poiché siete differita firmando solo con la chiave pubblica, la verifica dell'assembly CLR .NET avrà esito negativo con gli assembly creati localmente. Quando la verifica fallisce, non sarai in grado di eseguire o eseguire il debug degli assembly.

Per superare questo problema in fase di sviluppo, è necessario disabilitare la verifica del nome sicuro per gli assembly creati a livello locale e il segno di ritardo con la chiave pubblica.

Aprire un Visual Studio Prompt dei comandi Tipo: sn.exe -tp Key.snk

Ciò produrrà alcuni dati tra cui il token.

Tipo: sn -Vr *,YOUR_KEY_TOKEN

esempio: sn -Vr *,abcdef

Questo disabiliterà forte di verifica nome per tutte le assemblee firmati con la chiave pubblica. Si possono elencare impostazioni correnti per forte verifica nome con: sn -VL

Installazione della chiave privata per Team Build

Dal momento che la chiave privata (Key.pfx) è protetto da password - Team Build non può accedere esso. Grazie a Nagaraju Palla’s Blog: Using Password Protected Signing Keys in Team Build, abbiamo una soluzione.

di accesso al server di Team Build come account del servizio di compilazione Aprire il progetto in Visual Studio Generare il progetto in Visual Studio Verrà richiesto di inserire la password per il file della chiave privata. Immettere la password Chiudere Visual Studio & Disconnettere Il file della chiave privata è ora installato nell'archivio certificati locale dell'account del servizio di generazione e Team Build può accedervi senza chiedere nuovamente la password. Questo archivio certificati è sicuro quanto la password dell'account del servizio di generazione. (Suggerimento: Make it altrettanto forte come password del file di chiavi)

Aggiornamento TFSBuild.proj costruire Script

Team Build ha accesso al file di chiavi private e la password. Ciò gli consente di firmare completamente gli assiemi.

Per sovrascrivere le impostazioni di progetto e di istruire Team Build di utilizzare il file di chiavi privata e disabilitare parziale firma, abbiamo bisogno di impostare la proprietà CustomPropertiesForBuild in TFSBuild.proj

Partenza vostro script di build TFSBuild.proj Ricerca per la proprietà segnaposto (vicino alla riga 130 per impostazione predefinita) Sostituirlo con il seguente: SignAssembly = true; DelaySign = false; AssemblyOriginatorKeyFile = $ (MSBuildExtensionsPath) \ Key.pfx check-nelle modifiche coda una build Verifica dell'output di Team Build

Per verificare che Team Build abbia assegnato correttamente il nome degli assembly, è possibile utilizzare l'utilità sn.exe per verificare la firma del nome sicuro.

Aprire un Visual Studio Prompt dei comandi Tipo: sn.exe -vf assemblyname.dll

È inoltre possibile verificare tutti gli assembly al tempo stesso:

Aprire un Visual Studio Prompt dei comandi Tipo : PER% a IN (* .dll) DO sn.exe -vf% a

+0

Ottima risposta, grazie! ma corro qualche problema quando provo a costruire il progetto manualmente per far installare la chiave. Non ho installato lo studio visivo "normale", solo tfs explorer e tfs build. significa che devo installare il team dev per costruire il mio progetto una sola volta? – Sorskoot

+0

Qual è il messaggio di errore? –

+0

Non ricevo un errore. Tranne il MSB4018 dalla mia domanda quando si lascia che il TFS faccia l'edificio. Mi sono bloccato dopo aver aperto il progetto in Visual Studio sul server di build. L'intero progetto è disattivato, perché ho solo la shell con i servizi di compilazione installati sul server. Penso che sto supervisionando qualcosa qui;) – Sorskoot