Ocorreu um erro ao validar. HRESULT = '8000000A'

98

Tenho recebido esse erro há algum tempo ao usar o devenv em uma construção automática. Visitei todos os sites que consegui encontrar e as respostas usuais mencionam dependências atualizadas (que acredito que corrigem para implantação manual, mas não para automática) e removendo a codificação de controle de origem dos projetos, o que não me ajudou.

O erro não ocorre sempre que eu construo, mas parece aleatório em diferentes projetos de implantação a cada vez.

Alguém tem algum conselho sobre por que exatamente esse erro ocorre e como proceder para corrigi-lo?

Chris C.
fonte
você conseguiu uma solução mais elegante finalmente? você acabou de disparar novamente a compilação quando ela falha . Talvez seja útil colocar script ( elegant solution) na essência, IMHO.
Kiquenet

Respostas:

53

Este é um problema conhecido no Visual Studio 2010 (uma condição de corrida). Veja este item de conexão .

Nós também encontramos isso e recebemos uma chamada de suporte muito insatisfatória sobre esse problema com a Microsoft. Resumindo: é um problema conhecido, não será resolvido e a Microsoft recomenda deixar de usar os projetos de instalação do Visual Studio (.vdproj).

Contornamos esse problema disparando a construção do MSI uma segunda vez, quando ele falha pela primeira vez. Não é legal, mas funciona na maioria das vezes (a taxa de erro caiu de ~ 10% para ~ 1%).

oɔɯǝɹ
fonte
Muito obrigado. Eu estava vasculhando a internet para descobrir por que exatamente isso estava acontecendo e encontrei inúmeras respostas da Microsoft que foram vagas e inúteis, para dizer o mínimo. Acabei de disparar novamente a compilação quando ela falha, mas esperava uma solução mais elegante. Obrigado novamente.
Chris C.
@ChrisC. stackoverflow.com/a/25054572/206730 resposta tem mais votos, você tentou assim?
Kiquenet
@ oɔɯǝɹ você poderia explicar o que quer dizer com disparar o MSI construir uma segunda vez ?, tem o mesmo problema ..
Leon Barkan,
123

Atualização para quem teve esse problema para o VS2013 ou VS2015 após atualizar um projeto de instalação do VS200X usando a extensão Projetos do instalador do Microsoft Visual Studio.

Seguir a receita para v1.0.0.0 do MS finalmente fez com que funcionasse para mim:

Projetos do instalador do Microsoft Visual Studio

Infelizmente, não foi possível resolver todos os casos de problema de linha de comando para esta versão, pois ainda estamos investigando a maneira apropriada de resolvê-los. O que temos é uma solução alternativa que acreditamos que funcionará para quase todos eles. Se ainda estiver sofrendo desse problema, você pode tentar alterar o valor DWORD do seguinte valor do Registro para 0: HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\MSBuild\EnableOutOfProcBuild (VS2013)
ou
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MSBuild\EnableOutOfProcBuild(VS2015)
Se não existir, você pode criá-lo como um DWORD.

Cristian Mo
fonte
23
Observe que as atualizações do Visual Studio 2013 apagarão essa variável do seu registro - você precisará adicioná-la novamente.
Derek W
4
Apenas uma observação, ao trabalhar com Jenkins, a chave de registro precisa ser adicionada para o usuário que executa escravos Jenkins.
Jirong Hu
3
TENHA EM MENTE que a seção do registro é HKEY_CURRENT_USER, portanto, se estiver sendo chamada por uma conta diferente da sua (por exemplo, tfs build account), você precisará fazer o login como ESSA conta e adicionar a configuração.
Mike Cheel
3
Para adicionar comentários @DerekW, isso também pode ser eliminado por atualizações automáticas.
JustAnotherDeveloper
2
@MikeCheel você pode definir HKEY_USERS \ .DEFAULT \ Software \ Microsoft \ VisualStudio \ 14.0_Config \ MSBuild \ EnableOutOfProcBuild para corrigi-lo para todos os usuários :)
Ian Ellis
57

Atualização em 14/06/2017

a extensão Projetos do instalador do Microsoft Visual Studio 2017 agora inclui uma ferramenta auxiliar de linha de comando para tornar a configuração do registro muito mais fácil de aplicar Projetos do instalador do Microsoft Visual Studio 2017

Caminhos de exemplo da ferramenta (com base na versão do Visual Studio instalada)

Edição Profissional: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild\DisableOutOfProcBuild.exe


Edição da comunidade: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild\DisableOutOfProcBuild.exe

Do README


Esta ferramenta simples tem como objetivo ajudar os usuários a definir a chave de registro necessária para contornar este erro que pode aparecer ao construir projetos de instalação usando compilações de linha de comando:

ERROR: Ocorreu um erro durante a validação. HRESULT = '8000000A'

A ferramenta destina-se ao Visual Studio 2017+ e define esta chave de registro para uma determinada instância instalada do Visual Studio para o usuário atual. Portanto, se estiver configurando isso em um agente de construção, certifique-se de usar a conta de usuário que a construção usará.

Execute "DisableOutOfProcBuild.exe help" para obter detalhes de uso.


Aussie Ash
fonte
4
Esta é a melhor solução para VS2017
Simon O'Beirne
Acho que esta é a terceira vez que tive esse problema, passei horas tentando consertar e, finalmente, redescobri essa resposta. Obrigado!
Hannes Sachsenhofer
2
Você tem que mudar o dir para esse local para que funcione corretamente. Consulte github.com/it3xl/MSBuild-DevEnv-Build-Server-Workarounds/issues/… e github.com/it3xl/MSBuild-DevEnv-Build-Server-Workarounds/blob/…
GilesDMiddleton
Perfeito para mim usando o Visual Studio 2019 Community Edition na minha máquina de compilação.
Max Power
48

Eu li em algum lugar online sobre isso, e corrigi assim (foi sugerido por alguém) :

  • abra seu arquivo de projeto de instalação (.vdproj) no bloco de notas (ou qualquer outro editor de texto)
  • exclua essas linhas no início do arquivo .vdproj:

    "SccProjectName" = "8:"
    "SccLocalPath" = "8:"
    "SccAuxPath" = "8:"
    "SccProvider" = "8:"
  • construir novamente - o erro desapareceu

Esse erro não me impediu de implantar, construir, depurar (ou qualquer outro) meu projeto, apenas me irritou. E funcionou mesmo se eu definir todos os projetos para serem compilados com a configuração atual e o projeto de configuração não.

Cipi
fonte
3
O problema com o problema é que é uma condição de corrida. Fazer um ajuste (aleatório) e reconstruir fará com que pareça que foi corrigido. Apenas reconstruir também faria o problema desaparecer. Eu gostaria de saber se ele permanece 'fixo' após 100 compilações.
oɔɯǝɹ
6
Pode ser uma condição de corrida, mas a correção acima funciona e me permite continuar com minha vida (até o próximo problema que me faz vasculhar o estouro da pilha :))
gls123
39

Solução permanente (+ para máquinas de construção)

Visual Studio 2017

Para o VS 2017, chame os seguintes scripts CMD em sua conta de destino do Windows:

Community edition
Professional edition
Enterprise edition

TL; DR. Notas para pobres DisableOutOfProcBuild.exe, a solução oferecida pela Microsoft que uso para o VS 2017.

  1. DisableOutOfProcBuild.exenão assume que você irá retirá- lo de sua pasta de instalação . Portanto, você não pode copiar este arquivo .exe. (A propósito, se você deseja construir .vdproj, você deve instalar o VS.)
  2. DisableOutOfProcBuild.exe só funcionará se o diretório CMD atual estiver definido como o local de instalação de DisableOutOfProcBuild.exe.

Por exemplo, para a edição VS Professional, devemos chamar

CD "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild"
CALL DisableOutOfProcBuild.exe

Visual Studio 2015 e anteriores

por CMD para o usuário atual do Windows

Para muitas pessoas, a criação / correção HKEY_CURRENT_USER\..nem sempre funciona ou funciona permanentemente.
Tentando resolver isso, descobri que, na verdade, tenho que criar / alterar alguma chave estranha em HKEY_USERS HKEY_USERS\S-1-5-xx-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxxxx-xxxxx\...\MSBuild

Mas também descobri que, se for usar um console CMD HKCUcom a correção proposta,
REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f
isso gravará o valor exatamente naquela chave estranha HKEY_USERS \ S-1-5-xx-xxxxxxxxxx-xx ... , não no HKEY_CURRENT_USER .

Então, isso funciona desde o primeiro tiro e para sempre. Basta usar o console CMD.

REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f
@REM (use 12.0_Config for VS2013)

Solver para construir servidores

Por outro lado, este código sempre funciona para uma conta de usuário atual que o inicia (por causa de HKEY_CURRENT_USER). Mas os servidores de construção costumam usar contas dedicadas ou Sistema Local, etc.

Corrigi-o em minhas máquinas de construção adicionando o seguinte arquivo em lote simples às minhas tarefas de construção (Jenkins, TeamCity, CruiseControl)

VS-2015 , VS-2013 , VS-2017-Community , VS-2017-Professional , VS-2017-Enterprise

it3xl
fonte
1
depois de corrigir o reg evrey alguns meses por 2 anos agora, e o arquivo CMD não está funcionando bem alguma solução
CMS
1
O mesmo problema surgiu do nada ao construir um MSI a partir do projeto de instalação em um servidor de construção. O processo de compilação sempre funcionou antes e não mudou, mas começou a falhar consistentemente. Adicionado ao script de compilação pouco antes da chamada para devenv.exe e funcionou para mim no VS 2013. Muito obrigado.
Jim
No VS 15.8.x recebo este erro mesmo depois de rodar o EXE, porém fechando o VS, rodando o EXE e reiniciando o VS, o erro é resolvido. Portanto, algo no VS está redefinindo a configuração de reg e a solução é fechar o VS, executar novamente o DisableOutOfProcBuild.exe e, em seguida, iniciar o VS.
user2728841 01 de
1
Essa correção funcionou para compilações VS2015 TFS vNext. Usamos a conta NT Authority \ Network Service local para compilações automáticas, portanto, adicionar manualmente a chave reg do RDPing na VM de compilação não corrigiu o erro de compilação automática. Eu adicionei a etapa para criar a chave reg logo antes da etapa para chamar Devenv.com para o arquivo VDPROJ. Depois de lutar tanto para encontrar uma solução para isso, quero agradecer muito ao it3xl por postá-lo !!!
ckkkitty
6

Conforme apontado nos comentários aqui , para VS2017 você precisará criar o DWORD HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 15.0_ [IDKey] _Config \ MSBuild \ EnableOutOfProcBuild Substituir [IDKey] com o sufixo de ID da subchave 15.0 existente do VisualStudio .

Por exemplo, se em VisualStudio você vir a chave "15.0_abcd1234", seria "15.0_abcd1234_Config".

exemplo regedit

Noite 94
fonte
4

Eu enfrentei esse problema depois que mudei meu projeto para outro PC (VS 2010, vários projetos em uma solução).

Já estava compilado meu projeto no computador de origem, mas depois que copiei para o destino, não consegui compilar meu projeto de instalação e tive este erro.

Abri a /Debugpasta no caminho raiz do meu projeto de instalação, havia arquivos MyProject.msie setup.exe, apaguei-os e construí meu projeto novamente, funcionou. Espero que funcione para alguns caras também.

Kubilay
fonte
mais um +1, apenas excluindo os arquivos .msi e setup.exe e reconstruindo o projeto de instalação fez a mensagem de erro desaparecer
George
e -1, parece que só resolve o problema temporariamente, depois de reabrir a solução o problema reapareceu
George
@ChrisSchiffhauer para resolvê-lo, só você deleta arquivos msi e exe ?
Kiquenet
Bem dito por @kubilay, muito obrigado pela solução !! Esse problema pode causar a portabilidade de projetos de estruturas mais antigas para mais novas, pois definimos a versão mais recente da estrutura nas propriedades do projeto. Possivelmente, o projeto de instalação pode conter arquivos .msi e .exe em seu local de destino. Com a nova versão do framework, ele pode gerar erros ao sobrescrever os arquivos existentes. Então, clique com o botão direito no projeto de instalação -> vá para 'Nome do arquivo de saída' (em Propriedades de configuração \ Compilar) -> clique no botão '...' (navegar) -> obtenha o local de destino e exclua os arquivos .msi e também .exe . Agora construa o projeto e ele deve funcionar.
Navin Pandit
1

Verificar as dependências do projeto pode ajudar.

No VS 2010, clique com o botão direito do mouse no gerenciador de soluções e clique em Dependências detectadas e em Atualizar dependências; às vezes, isso resolverá o problema.

Jla
fonte
1

Estou usando o VS 2017, mas nenhuma das soluções acima funciona. Então, atualizei a versão mais recente do VS 2017 e aplique a solução @AussieAsh e seu bom funcionamento ...

Espero que essa solução possa funcionar.

Rikin Patel
fonte
0

comigo foi causado por um arquivo .suo errado. (causado pelo skydrive) excluir este arquivo resolveu o problema.

Aswin
fonte
DisableOutOfProcBuild.exe funcionou por um tempo, até que isso não aconteceu. Excluir o arquivo .suo corrigiu o problema.
Sego,
0

O Visual Studio 2017 armazena as informações armazenadas anteriormente no registro público em um novo registro privado: C: \ Usuários \\ AppData \ Local \ Microsoft \ VisualStudio \ 15.0_6de65198 \ privateregistry.bin

É aqui que você precisa adicionar o EnableOutOfProcBuild de acordo com as instruções para VS2013 / VS2015.

Para atualizar o registro privado, você pode usar o Regedit.

Clique para selecionar o nó HKEY_USERS.

Selecione Arquivo> Carregar seção e navegue até o arquivo privateregistry.bin. Quando você selecioná-lo, o Regedit pedirá um nome - não importa como você o chame, pois isso será feito em breve.

Agora a estrutura do registro aparecerá e você pode navegar até Microsoft \ VisualStudio \ 15.0_Config \ MSBuild

Crie um novo EnableOutOfProcBuild DWORD com valor 0.

Uma vez feito isso, selecione a raiz da colmeia (qualquer que seja o nome que você tenha dado) e use File> Unload Hive para separar dela.

Agora deve funcionar: o)

Gwynge
fonte
Não há necessidade de mexer no arquivo de registro privado, você pode apenas criar a chave 15.0_ <x> _Config no registro regular (veja acima)
Noite94
0

Meu Visual Studio 2013 de alguma forma se tornou Experimental, então começou a usar outra chave de registro para EnableOutOfProcBuild

insira a descrição da imagem aqui

Para ter certeza, acabei de adicionar outra linha em meu arquivo em lote para definir o valor do registro e ele começou a funcionar:

REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\12.0_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f
REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\12.0Exp_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f
Hovhannes Hakobyan
fonte
0

Apenas execute este exe

(Visual Studio 2017 Community edition)

C: \ Arquivos de programas (x86) \ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ CommonExtensions \ Microsoft \ VSI \ DisableOutOfProcBuild \ DisableOutOfProcBuild.exe

(Visual Studio 2017 Enterprise edition)

C: \ Arquivos de programas (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ CommonExtensions \ Microsoft \ VSI \ DisableOutOfProcBuild \ DisableOutOfProcBuild.exe

Lakmal
fonte
0

Ok, examinei esse problema até ficar com o rosto azul, o rosto vermelho, perdendo o cabelo e perdendo a cabeça, e tentei todas as etapas que pude. :-D

Minha solução para Visual Studio 2017 / TeamCity foi uma combinação das duas soluções de @ it3xl e alguma assistência de @ Night94 .

O problema parecia ser a falta da chave de registro do usuário TeamCity .

  • Executando DisableOutOfProcBuild.exe conforme mencionado por @AussieAsh portanto, não funcionou, pois adicionou a chave de registro apenas para o meu usuário.
  • usar o script mencionado por @ it3xl também falhou quando executado a partir do TeamCity

A solução foi, portanto, adicionar o seguinte como uma etapa de compilação de linha de comando do TeamCity antes do MSBuild:

REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\15.0_2c79e3fe_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f

Depois que essa etapa for executada, ela poderá ser removida, se necessário.

Resumo da solução

Ou:

  • executado DisableOutOfProcBuild.exe como o usuário TeamCity , ou
  • navegue até a chave de registro HKCU\SOFTWARE\Microsoft\VisualStudioe verifique a versão listada, em seguida, corrija o acima REG ADDpara corresponder às versões (lembre-se de adicionar _Config) como uma etapa na construção do TeamCity.

Novamente, o acima deve ser feito apenas uma vez. Você pode desabilitar para entrar no TeamCity, deixando-o para referência, caso encontre o problema novamente.

SharpC
fonte
0

Etapa 1 Eu "criei uma chave DWORD com o nome“ EnableOutOfProcBuild ”e defini seu valor como“ 0 ”no caminho abaixo

HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild

Nota: Certifique-se de ter logado com o mesmo usuário que você está tentando construir o projeto

Está funcionando bem pra mim.

Dharti Sutariya
fonte
-1

Teve esse problema hoje, tente reiniciar o Visual Studio, se isso não adiantar crie um novo projeto, salve-o e copie os arquivos do projeto problemático. ambos os métodos funcionaram para mim.

FadingAway90
fonte
-3

Limpe a solução primeiro, construa a solução e depois tente construir o instalador. Isso removerá o erro.

Keennary Pungyera
fonte