2017-09-13 21 views
0

OK - donc c'est vraiment bizarre. J'ai une construction TFS qui signe un fichier et je reçois le message ci-dessus. Si je regarde le journal de la construction, il dit qu'il a signé et horodaté avec succès mon fichier, (il y a un fichier .proj qui appelle manuellement signtool) mais en dessous dans une étape différente (je ne sais pas exactement où) - je suppose que c'est la signature ClickOnce je reçois l'erreur. Je peux signer le fichier moi-même en utilisant Signtool en utilisant les mêmes paramètres que la construction utilise donc je pensais que j'avais besoin d'importer le cert, donc j'ai ouvert mmc, ajouté le certificat snap-in, passé par l'importation Assistant utilisant Local Machine pour l'installer (la compilation TFS s'exécute sous un autre compte que le mien et je ne connais pas le mot de passe pour ce compte, donc j'ai pensé que l'installer au niveau de la machine fonctionnerait). J'ai parcouru pour le fichier et l'a importé avec succès dans les autorités de certification racine de confiance (voir ci-dessous):Obtention Une erreur est survenue lors de la signature: Impossible de signer le fichier.exe. SignTool Erreur: Aucun certificat répondant à tous les critères

enter image description here et encore je reçois l'erreur quand je construis. L'outil de signature est appelé à partir d'un fichier .proj appelé dans la construction TFS, mais de nouveau par la construction au cours de ClickOnce. Après avoir importé le cert à travers l'écran VS je vois ceci: enter image description here

et obtenir cette erreur:

C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets (2718): Unable to find code signing certificate in the current user’s Windows certificate store. To correct this, either disable signing of the ClickOnce manifest or install the certificate into the certificate store. 
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets (2718): Cannot import the following key file: . The key file may be password protected. To correct this, try to import the certificate again or import the certificate manually into the current user’s personal certificate store. 
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets (2718): Importing key file "les.pfx" was canceled. 

Le Cert est dans le même dossier que le .csproj ainsi que d'être importé dans le magasin .

Here's the cert info and the Thumbprint matches what's in the .csproj file: 

enter image description here

enter image description here

enter image description here

Toutes les idées que je pourrais être absent ici?

Répondre

0

Selon le message d'erreur, vous devez importer le certificat dans le magasin personnel de l'agent. Lorsque vous référencez le certificat dans le magasin personnel, il ne vous demandera pas le mot de passe, vous pouvez donc accéder à votre certificat de signature de code.

Si plusieurs projets sont en cours de construction avec ClickOnce, vous devez importer le certificat dans chacun des projets.

S'il vous plaît essayer d'utiliser l'invite de commandes Visual Studio pour importer le certificat dans votre machine d'agent de construction:

  1. Cliquez sur Démarrer> Tous les programmes> Microsoft Visual Studio> Visual Studio Outils> Invite Visual Studio Commande.
  2. Tapez l'exemple de commande suivante:

    sn -i "c:\Pathtofile\.pfx" VS_KEY_C1D3ACB8FBF1AGK4

    Note: Le sn.exe avec le paramètre -i, installe une paire clé dans un conteneur clé nommée.

  3. Réimportez le fichier pfx dans Visual Studio.

Vous pouvez aussi créer un script PowerShell et exécuter pre-build scripts dans votre définition de génération pour importer le certificat.

L'exemple de script PowerShell pour votre référence:

$pfxpath = 'pathtoees.pfx' 
$password = 'password' 

Add-Type -AssemblyName System.Security 
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 
$cert.Import($pfxpath, $password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet") 
$store = new-object system.security.cryptography.X509Certificates.X509Store -argumentlist "MY", CurrentUser 
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]"ReadWrite") 
$store.Add($cert) 
$store.Close() 

Référence ces fils: