Olá, estou com um problema ao executar um script NAnt que costumava criar corretamente meu site baseado em .Net 2.0, ao compilar com o VS2008 e suas ferramentas associadas. Atualizei recentemente todos os arquivos de projeto / solução para o VS2010 e agora minha compilação falha com o seguinte erro:
[exec] C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (2249,9): erro MSB3086: A tarefa não pôde encontrar "sgen.exe" usando o S dkToolsPath "" ou o registro chave "SDKs HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft \ Windows \ v7.0A". Verifique se o SdkToolsPath está definido e se a ferramenta existe no local correto do processador correto em SdkToolsPath e se o Microsoft Windows SDK está instalado
Agora, eu tenho versões anteriores (.Net 3.5) do Windows SDK instaladas no servidor de compilação e a estrutura completa do .Net 4.0 está instalada, mas não encontrei uma versão específica do .Net 4.0 do Windows SDK.
Após algumas experimentações e pesquisas, finalmente configurei uma nova variável ambiental "SDKToolsPath" e apontei para a cópia do sgen.exe na minha pasta sdk do Windows 6.0. Isso gerou o mesmo erro, mas percebi que, embora a variável ambiental SDKToolsPath esteja definida (confirmou que eu posso "repetir" na linha de comando e tem o valor esperado), a mensagem de erro parece indicar que está não está sendo lido (observe as aspas vazias).
A maioria das informações que encontrei é específica do .Net 3.5 (ou anterior). Ainda não há muitos 4.0 relacionados por aí. A busca pelo código de erro MSB3086 também não gerou nada útil. Alguma idéia do que possa ser isso?
Scott
Respostas:
Eu tive que aceitar o problema e instalar o VS 2010 em nosso servidor de compilação para corrigir esse problema. Tanto quanto posso ver, não há uma versão 7.0A do Windows SDK disponível em qualquer lugar no MSDN. No entanto, a instalação do VS 2010 parece instalá-lo, criando uma regkey 7.0A e uma pasta 7.0A em Program Files \ Microsoft SDKs \ Windows.
fonte
Não consegui colocar o Visual Studio no servidor de compilação.
O SDK v7.0A é o SDK instalado com o Visual Studio 2010 (A indica que esta é uma versão do VS). Desde então, uma versão mais recente foi lançada. Microsoft Windows SDK para Windows 7 e .NET Framework AKA v7.1 .
Eu instalei isso no meu servidor de compilação. E, por meio do prompt de comando do Windows SDK 7.1 (Iniciar => Todos os Programas => Microsoft Windows SDK 7.1), defino a versão padrão do SDK como 7.1.
Passos:
Edite para incluir o comentário de LordHits: não é necessário instalar o SDK inteiro. Instalar apenas as opções ".NET Development / Intellisense e Reference Assemblies" e ".NET Development / Tools" é suficiente.
fonte
Basta passar o parâmetro GenerateSerializationAssemblies com o valor Off para seu MsBuild.
fonte
Eu passo manualmente as variáveis para o MSBuild no servidor de compilação.
fonte
Encontrei um problema semelhante recentemente no nosso servidor de compilação.
Copiei a pasta 7.0A (C: \ Arquivos de programas \ Microsoft SDKs \ Windows \ 7.0A) do meu computador (que possui o VS2010 instalado) para o servidor de compilação no mesmo local.
Após criar a seguinte chave do Registro: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A. Defina InstallationFolder como C: \ Arquivos de Programas \ Microsoft SDKs \ Windows \ 7.0A.
Você também pode fazer referência ao registro em sua máquina com o VS2010 já instalado, se estiver confuso sobre o que fazer com o registro no servidor de compilação.
fonte
Corri para o mesmo erro, mas em uma situação diferente: usando o VS 2010 Express e tentando usar a resposta do Simmo para definir explicitamente a versão do SDK - no entanto, o WindowsSdkVer.exe (ferramenta de configuração de versão) parece não ter como alvo o Express (compreensível, pois é limitado )
Estou usando o VS 2010 Express no Win 7 Prof. e ele sempre deseja usar a v7.0A do Win SDK (que não possui todos os exes necessários) e não importa qual versão eu defini explicitamente como atual usando WindowsSdkVer.exe (Ele continua relatando que define a versão atual do SDK, mas para o VS 2008, embora eu só tenha o 2010 Ex instalado.)
Portanto, minha solução alternativa mais barata foi instalar o v7.0 WIN SDK (ou outra versão como v7.1) e renomear sua pasta do sistema de arquivos para v7.0A - basicamente eu menti para o VS 2010 Express, mas agora funciona!
fonte
Um de seus projetos usa o sgen.exe (Server Generator) para gerar serviço da web. você precisa instalar SDKs para criar o servidor ou remover referências de serviço da Web do projeto.
fonte
Eu suspeito que o arquivo de destinos está substituindo o caminho das ferramentas, dei uma olhada rápida nesse arquivo e define o SDKToolsPath como $ TargetFrameworkSDKToolsDirectory sob alguns dos destinos existentes. Não acho que você precise configurá-los no ambiente, mas eles podem precisar ser corrigidos nos arquivos do projeto.
Observe que, de acordo com esta página http://nant.sourceforge.net/, o Nant não suporta .Net 4.0, este poderia ser o problema real?
Desculpe, eu sei que isso realmente não responde à sua pergunta :(
fonte
Eu tive o mesmo problema em uma nova máquina Windows 10. Minha configuração:
Mas não consegui criar projetos .NET 4.0:
O nome do arquivo "AL.exe" com o SdkToolsPath-Wert "" ou "Registrador de arquivo de registro" HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86
Solução: Depois de tentar (e falhar) instalar o Windows 7 SDK (porque isso também inclui o .NET 4.0 SDK), eu precisava instalar o Windows 8 SDK e verificar se o ".NET Framework 4.5 SDK" está instalado.
É uma loucura ... mas funcionou.
fonte
Você não tem o SDK versão 7.0A instalado? Esse é um problema que você precisará corrigir. Consulte os arquivos de log de instalação do VS2010 para ver o que deu errado. O SDK deve estar presente em c: \ arquivos de programas \ microsoft sdks \ windows \ 7.0a e a chave do Registro listada também deve estar presente. A execução com a versão 6.0a do sgen.exe não está bem, é obrigatório o uso do compilador errado.
fonte
Defina em
Sdk40ToolsPath
vez deSdkToolsPath
especificar um local diferente do diretório de instalação.Eu encontrei um problema semelhante com o AL.exe porque havia copiado as ferramentas na máquina de compilação em vez de instalar o SDK, portanto, as chaves de registro normais estavam ausentes. Fiz uma compilação com saída de diagnóstico (/ verbosity: diagnostic) e notei que havia vários caminhos de ferramentas do SDK definidos: Sdk40ToolsPath, Sdk35ToolsPath e SdkToolsPath. Definir Sdk40ToolsPath para apontar para a pasta bin da versão apropriada do SDK resolveu o problema para mim.
fonte
Eu concordo com a resposta de IanS. Não é necessário instalar o novo SDK. Apenas verifique se os valores da chave do Registro SDK35ToolsPath e SDK40ToolPath for MSBuild estão apontando para corrigir os valores da chave do Registro.
No meu caso, meu projeto foi direcionado para o .NET 3.5 e eu tive que definir o SDK35ToolsPath para a chave HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 para $ (Registro: SDKs da Microsoft \ Microsoft \ Windows \ v6.0A \ WinSDKNetFxTools @ InstallationFolder). E tudo funcionou.
fonte
Temos um winXP build pc e usamos o Visual Build Pro 6 para criar nosso software. como alguns de nossos desenvolvedores usam o VS 2010, os arquivos do projeto agora contêm referência à "ferramenta versão 4.0" e, pelo que posso dizer, isso indica ao Visual Build que ele precisa encontrar um sdk7.x em algum lugar, mesmo que apenas o .NET 3.5 seja compilado . Isso fez com que não localizasse o lc.exe. Eu tentei enganá-lo, apontando todas as macros para o 6.0A SDK que acompanha o VS2008 que está instalado no PC, mas isso não funcionou.
Acabei conseguindo fazer o download e instalar o sdk 7.1. Criei uma chave de registro para 7.0A e apontei o caminho de instalação para o caminho de instalação do 7.1 sdk. agora, felizmente, encontra um "lc.exe" compatível e todo o código é compilado corretamente. Tenho a sensação de que agora também será capaz de compilar o código .NET 4.0, embora o VS2010 não esteja instalado, mas ainda não o tentei.
fonte
ToolsVersion = "4.0" faz isso por mim no meu projeto MSBuild:
fonte
Primeiro, verifique se você já está baixando o dotNetFx40_Full_x86_x64.exe e está instalado (geralmente é vinculado ao Visual Stdio).
Em seguida, defina rapidamente novas variáveis de ambiente em Variáveis do sistema. como abaixo:
"TargetFrameworkSDKToolsDirectory":"C:\Program Files (x86)\Microsoft SDKs\Windows\vxx.0A\bin\NETFX 4.6.1 Tools" //note:the path:'\vxx.0A\' is a variable indicating your version. it's '\v10.0A\' for me.
fonte
Eu tive esse mesmo problema e instalou o Windows SDK 7.0 e o Windows SDK 7.1, que não corrigiram o problema. A causa do problema para mim foi que a biblioteca de classes incorreta foi criada com o Target Framework do .NET Framework 2.0.
Mudei para o .NET Framework 4.0 e trabalhei localmente e, quando verificado, o servidor de compilação o construiu com sucesso.
fonte
Eu tive um problema semelhante, notavelmente msbuild falha: MSB3086, MSB3091: "AL.exe", "resgen.exe" não encontrado
Em uma máquina Windows 7 de 64 bits, instalei o .Net framework 4.5.1 e o Windows SDK para Windows 8.1.
Embora as configurações do SDK tenham dito que estava atualizado, provavelmente não estava. Resolvi o problema removendo todas as versões instaladas do SDK e instalando o seguinte, nesta ordem:
http://www.microsoft.com/en-us/download/details.aspx?id=3138
http://www.microsoft.com/en-us/download/details.aspx?id=8279
http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx
http://msdn.microsoft.com/en-us/windows/desktop/aa904949.aspx
fonte
Resposta curta: No arquivo .csproj, existe uma maneira de especificar o caminho para o sgen.exe, usando o SGenToolPath:
Seu caminho pode ser diferente, mas o SGenToolPath é o que você deseja.
Para obter uma lista de outras propriedades comuns do projeto MSBuild, consulte: https://msdn.microsoft.com/en-us/library/bb629394.aspx
Acabamos usando essa configuração do SGenToolPath no arquivo .csproj, em vez de editar os valores do registro no servidor de compilação. A edição dos valores do registro na minha máquina local também funcionou, mas era um pouco mais complicada e não queríamos mexer com o registro no servidor de compilação.
Para o registro: nesse caso, o problema era que os SDK40ToolsPath (s) em HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild estavam apontando para um valor de registro $ (Registro: SDKs para HKY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86 @ InstallationFolder) que não existia. Acabei de substituir isso diretamente pelo caminho real.
fonte
Também encontrei esse problema ao tentar criar um plug-in usando o Visual Studio 2017 no meu computador no local de trabalho terrivelmente bagunçado. Se você pesquisar na internet "incapaz de encontrar o resgen.exe", poderá encontrar todos esses conselhos, como ' basta usar o regedit para editar o registro do Windows e criar uma nova chave aqui e copiar e colar o conteúdo desta pasta em essa outra pasta, blá blá blá. "
Passei semanas apenas bagunçando meu registro do Windows com o regedit, provavelmente adicionei uma dúzia de subchaves e copiei o ResGen.exe em muitos diretórios diferentes, às vezes colocando-o em uma pasta 'bin', às vezes apenas mantendo-o na pasta principal, etc.
No final, percebi: "Ei, se o Visual Studio fornecesse uma mensagem de erro mais detalhada, nada disso seria um problema". Portanto, para obter mais detalhes sobre o erro, executei o MSBuild.exe diretamente no meu arquivo * .csproj na linha de comando:
Obviamente, você precisará alterar os detalhes do caminho para se adequar à sua situação, mas certifique-se de colocar 1) o caminho completo para o MSBuild.exe 2) o caminho completo para o seu arquivo * .csproj 3) o -fl -flp: logfile = part, que instruirá o MSBuild a criar um arquivo de log de cada etapa executada no processo, 4) o local em que você deseja que o arquivo * .log seja salvo e 5); verbosidade = diagnóstico, que basicamente informa ao MSBuild para incluir toneladas de detalhes no arquivo * .log.
Depois de fazer isso, a compilação falhará como sempre, mas você ficará com um arquivo * .log mostrando exatamente onde o MSBuild procurou o arquivo ResGen.exe. No meu caso, perto da parte inferior do arquivo * .log, encontrei:
Então, basicamente, o MSBuild procurou em cinco diretórios separados o ResGen.exe e desistiu. Esse é o tipo de detalhe que você simplesmente não consegue obter da mensagem de erro do Visual Studio e resolve o problema: basta usar o regedit para criar uma chave para qualquer um desses cinco locais e colocar o valor "InstallationFolder" na chave , que deve apontar para a pasta na qual o ResGen.exe reside (no meu caso, era "C: \ Arquivos de programas \ SDKs da Microsoft \ Windows \ v10.0A \ bin \ NETFX 4.7.2 Tools").
Se você é especialista em humanidades como eu, sem experiência em computadores, pode ser tentado apenas editar o heck out do Registro do Windows e copiar e colar ResGen.exe em todo o lugar, quando se deparar com um erro como esse (que é claro, más práticas). É melhor seguir o procedimento descrito acima: 1) Execute o MSBuild.exe diretamente no seu arquivo * .csproj para descobrir o local exato em que o MSBuild está procurando o ResGen.exe; em seguida, 2) edite o registro do Windows precisamente para que o MSBuild possa encontrar o ResGen. Exe.
fonte
Corrigi-o passando isso como parâmetro de linha de comando para o msbuild.exe:
Sua milhagem varia de acordo com a versão do SDK que você possui no seu sistema
fonte
Além dos mods de registro, pode ser necessário alterar a versão do .net sdk que suas configurações estão definidas no Visual Studio.
Eu estava com esse problema e decidi verificar as configurações de depuração do projeto.
Projeto => Propriedades da barra de ferramentas => botão Opções de compilação avançada de depuração
O Target Framework (todas as configurações) foi definido como 3.0, que não está no meu sistema.
Alterei isso para 4.0 e tive que reiniciar o projeto e o Visual Studio 2010.
O projeto foi construído sem erros e executado.
fonte
Eu tive um problema parecido. Eu tinha feito um projeto usando
Visual Studio 2010
e obtive o erro acima quando o compilei usandoVisual Studio 2012
. I simples copiado todo o conteúdoC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A
emC:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A
e que resolveu o meu problema.fonte
Eu apenas tive esse erro com um arquivo .sln que foi criado originalmente no Visual Studio 2010 (e sendo criado pelo Visual Studio 2010 e pelo TFS 2010). Modifiquei o arquivo de solução para NÃO criar um projeto que não deveria ser construído em uma configuração específica e o visual studio alterou o cabeçalho do arquivo de solução de:
Para:
A configuração da versão original de 2010 corrigiu meu problema. Eu acho que a compatibilidade com versões anteriores no Visual Studio ainda não foi aperfeiçoada.
fonte
tente usar o "reparo" do visual studio. Funcionou para mim.
fonte
Wrapper CMD
Eu tentei todas as coisas daqui e ainda mais. Nada me ajudou.
Eu apliquei um wrapper CMD para MSBuild e DevEnv.com.
A idéia principal dentro desse invólucro é criar um ambiente preparado chamando os Prompt de Comando do fornecimento do Visual Studio. E, em seguida, passe os parâmetros de entrada padrão para uma chamada do MSBuild ou DevEnv.com.
De qualquer forma, no meu servidor de compilação agora posso criar projetos de diferentes versões do Visual Studio.
Como usar
Eu tive que substituir chamadas para MSBuild e DevEnv por uma chamada para meus wrappers de arquivos em lote.
E não alterei nenhum parâmetro de entrada. Como um exemplo para minha chamada de wrapper MSBuild:
MsBuild_Wrapper.bat MySolution.sln /target Build /property:Configuration=Release
Solução pronta
Na verdade, tive muito mais problemas com a migração do VS 2010 para o VS 2015. Mas esse foi o primeiro e o mais difícil.
Portanto, minha modesta receita de resgate para um Build Server está aqui. Possivelmente, é difícil entender todo esse estilo de CMD desde o primeiro momento, mas qualquer lógica é óbvia, espero.
Dicas
Existem
MSBuild Command Prompt for Visual Studio
eDeveloper Command Prompt for Visual Studio
eu as uso adequadamente para MSBuild e DevEnv.com. Mas provavelmente o prompt de comando do MSBuild será suficiente.
Para o VS 2015, esses prompts de comando estão aqui
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
. Ou consulte o menu de programas do Windows.Para passar todos os parâmetros de entrada para o MSBuild ou o DevEnv dentro de um arquivo em lotes que usei
CALL MSBuild %*
fonte