A execução do projeto tSQLt a partir de fontes falha devido à incompatibilidade do Token Público

8

Estou tentando fazer algumas melhorias para a estrutura tSQLt e estou quase terminando, mas não posso fazer isso, pois poucos testes relacionados ao certificado que eu não estava tocando ainda estão falhando:

 [exec] |18|[InstallExternalAccessKeyTests].[test creates correct certificate in master]                                                       |    120|Failure|
 [exec] |19|[InstallExternalAccessKeyTests].[test tSQLt can be set to EXTERNAL ACCESS after InstallExternalAccessKey executed]                 |    333|Failure|
 [exec] |20|[InstallExternalAccessKeyTests].[test tSQLtExternalAccessKey install data is signed with same key as tSQLt.clr]                    |     10|Failure|

O erro com falha é:

Expected: %publickeytoken=8c9a92de0f9c7794,%
Actual: tsqltclr, version=1.0.7216.13228, culture=neutral, publickeytoken=8d3f4bf59e4c22fd, processorarchitecture=msil

Vou tentar descrever meu processo de instalação.

Instalei essas fontes de estrutura usando as seguintes diretrizes . No entanto, não pude iniciar o projeto depois disso, pois estava falhando com os seguintes erros e toda a solução de problemas foi feita naquele post do SO :

[exec]
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (2482,5): erro MSB3325: Não é possível importar o seguinte arquivo de chave: tSQLtOfficialSigningKey.pfx. O arquivo de chave pode estar protegido por senha. Para corrigir isso, tente importar o certificado novamente ou instale manualmente o certificado no CSP de nome forte com o seguinte nome de contêiner de chave: VS_KEY_C20B79DE0583A5C1 [E: \ Source \ tSQLt \ tSQLtCLR \ tSQLtCLR \ tSQLtCLR.csproj] [exec]
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (2482,5): erro MSB3321: A importação do arquivo de chave "tSQLtOfficialSigningKey.pfx" foi cancelada. [E: \ Source \ tSQLt \ tSQLtCLR \ tSQLtCLR \ tSQLtCLR.csproj]

para passar esse problema, criei novas chaves para cada projeto sem senha:

insira a descrição da imagem aqui

Vejo que ele criou o snkarquivo, não como original pfx. Depois disso, tentei executar a compilação novamente e ela falhou com os erros mencionados acima.

Dmitrij Kultasev
fonte
Por que usar o tsqlframework? Inclui tantos códigos no código do banco de dados, muitas funções do SQL CLR. Eu tentei usar se para 2 grandes projetos ao longo do ano e ele falha muito. Será melhor criar um teste próprio usando .net ou / e SQL e executá-los através de alguma ferramenta para obter execução paralela.
gotqn
Não tenho muita certeza do que exatamente você está falando. Existem apenas várias funções SQL CLR lá. Além disso, é muito estável e "falha muito" apenas soa estranho. Até a Redgate incluiu essa estrutura em seus produtos. Você pode pesquisar no Google e descobrirá que é a melhor estrutura de teste de unidade até agora.
Dmitrij Kultasev
Eu sei que é o melhor, mas não é bom. Eu o usei várias vezes e assisti a algumas demonstrações on-line, solicitei aprimoramentos e outras coisas, mas acabei criando testes próprios. Esse é o meu conselho - não confie nessa estrutura.
gotqn
Eu o uso há muitos anos e sempre funcionou bem para mim, também nos grandes projetos.
Dmitrij Kultasev 04/11/19

Respostas:

0

Como indicado aqui

O seguinte erro pode ocorrer ao criar projetos para o Microsoft Visual Studio 2008 - 2015.

Erro : Não é possível importar o seguinte arquivo de chave: mykey.pfx. O arquivo de chave pode estar protegido por senha.

Não é possível importar o seguinte arquivo de chave: mykey.pfx. O arquivo de chave pode estar protegido por senha. Para corrigir isso, tente importar o certificado novamente ou instale manualmente o certificado no CSP de nome forte com o seguinte nome de contêiner de chave: VS_KEY_C1D3ACB8FBF1AGK4

SOLUÇÃO 1:

Clique em Iniciar> Todos os Programas> Microsoft Visual Studio> Ferramentas do Visual Studio> Prompt de Comando do Visual Studio. Digite o seguinte comando

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

Nota : O sn.exe com o parâmetro -i instala um par de chaves em um contêiner de chaves chamado. Re-importar o arquivo PFX em Visual Studio.

SOLUÇÃO 2:

  • Abra Propriedades do Projeto.

  • Clique na seção Assinatura.

  • Onde diz 'Escolha um arquivo de chave de nome forte:', selecione novamente o valor atual na caixa suspensa
  • O Visual Studio agora solicitará a senha. Digite. Você pode receber outra mensagem de erro: ”Foi feita uma tentativa de referenciar um token que não existe”> Você pode simplesmente ignorar esta mensagem.

  • Clique no botão "Alterar senha"

  • Digite a senha original nas três caixas e clique em OK. Se você gostaria de mudar
  • sua senha (ou se sua senha antiga não atender aos requisitos de complexidade), você pode fazer isso agora.
  • Repita para cada arquivo de chave no seu projeto. Salve seu projeto e faça uma reconstrução.

SOLUÇÃO 3:

Obtenha uma cópia do openssl para windows em slproweb.com ou use uma caixa do Linux, pois elas praticamente a possuem. Execute o seguinte para exportar para um arquivo de chave

openssl pkcs12 -in certfile.pfx -out backupcertfile.key

openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key

Em seguida, nas propriedades do projeto, você pode usar o arquivo PFX

SOLUÇÃO 4:

A solução final para esse problema é desistir do Visual Studio para fins de assinatura e usar o Signtool .

Resposta atualizada

Parece que sua conta do TFS Build Service não tem permissão necessária para acessar o signatureKey.pfx na máquina do agente de construção. Verifique se você tem esse arquivo na máquina do agente de construção primeiro.

Em seguida, siga as etapas abaixo:

  1. Efetue logon no agente de compilação como sua conta local do serviço de compilação (é melhor ter permissão de administrador)
  2. Abra um prompt de comando do visual studio e navegue até o diretório em que a chave está armazenada
  3. Comando Type sn –i signingKey.pfx VS_KEY_EFCA4C5B6DFD4B4F(certifique-se de usar o nome da chave que aparece na mensagem de erro)
  4. Quando uma senha for solicitada, digite a senha do arquivo pfx

  5. Depois reconstrua-o

Nota: Se você não estiver executando o Visual Studio como administrador, tente fazer isso também.

Mais detalhes, você pode consultar a resposta de Brandon Manchester Não é possível importar o arquivo de chaves 'blah.pfx' - erro 'O arquivo de chaves pode estar protegido por senha'

Vignesh Kumar A
fonte
Não sei a senha da chave #
Dmitrij Kultasev 02/11/19
você tem alguma ideia?
Dmitrij Kultasev
1
Todas as soluções fornecidas no seu caso exigiam senha. Eu não tenho um. Sign the ClickOnce manifestsestá desmarcado e DESATIVADO. Eu estou tentando fazer tudo localmente, por isso não há problemas de permissões (Tentei executar esta linha de comando sob o administrador)
Dmitrij Kultasev
1
Há 7 pontos que dizem "Digite a senha original nas três caixas e clique em OK. Se você deseja alterar sua senha (ou se sua senha antiga não atender aos requisitos de complexidade), faça isso agora.". Como já afirmei, não tenho senha.
Dmitrij Kultasev
1
nesse exemplo, o autor conhece a senha e eu não
Dmitrij Kultasev 5/11/19