Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

Visual Studio – Resolvendo o problema entre sgen.exe e o SDK do .NET Framework (Erro no Build)

Visualizações: 2.437 views
Tempo de Leitura: 3 minutos

Olá pessoal,
Boa tarde!

Neste post vou compartilhar com vocês um problema que eu tive durante o desenvolvimento de algumas rotinas do CLR em C# em um novo ambiente de criei utilizando o VMware, Windows 7 x64 e o Visual Studio 2015 Community Edition.

O problema

O problema ocorre quando eu tento realizar o Build ou publicar o meu assembly no banco de dados. Esse tipo de problema não é exclusivo do CLR e sim do Visual Studio + .NET Framework, afetando desenvolvedores C# também.

A mensagem de erro que ocorre é essa:

Microsof Visual Studio 2015 - SdkToolsPath Build Error

Task could not find “sgen.exe” using the SdkToolsPath “” or the registry key “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86”. Make sure the SdkToolsPath is set and the tool exists in the correct processor specific location under the SdkToolsPath and that the Microsoft Windows SDK is installed

Está bem claro que o que está acontecendo é que o Visual Studio não está conseguindo encontrar o executável sgen.exe. Vamos ententer o motivo.

A solução – Resolvendo o problema

Fazendo uma pesquisa rápida no Google, identifiquei algumas “soluções” apontadas pelos usuários:

  • Instalar o Visual Studio 2010: Acho que voltar no tempo e utilizar o Visual Studio 2010 não é legal.. Principalmente porque no VS 2010 eu nem consigo publicar o CLR num banco de dados SQL Server 2014
  • Instalar o Windows SDK: Até poderia ser uma possível solução, mas o SDK não está disponível para todas as plataformas, como o Windows Server 2012, por exemplo, então não seria uma solução definitiva.
  • Desativar a geração de assembly de serialização: Eu testei essa solução e realmente funciona. O erro não ocorre mais.

    Microsof Visual Studio 2015 - SdkToolsPath Error Fix - Disable Serialization Assembly

    Porém, como eu utilizo WebServices e serialização de XML, não é uma opção pra mim, uma vez que se eu não gerar o serializador meu projeto apresentará erros de execução.

Pois bem, como nenhuma delas me pareceu ser uma solução sólida, vamos buscar uma nova alternativa. Analisando mais algumas respostas e publicações, consegui identificar essa forma de resolver definitivamente o problema:

  1. Abra o RegEdit no seu computador
  2. Acesse essa chave de registro: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0

    Microsof Visual Studio 2015 - SdkToolsPath Error Fix 1

  3. Note que a chave SDK40ToolsPath aponta para uma outra chave de registro, que é onde realmente os arquivos ficam localizados. Caso você esteja utilizando o .NET Framework 2.0 ou 3.5 no seu projeto, você deverá olhar para a chave SDK35ToolsPath
  4. Abra essa chave de registro e veja qual o diretório dos arquivos do SDK

    Microsof Visual Studio 2015 - SdkToolsPath Error Fix 2

  5. Agora abra o diretório que está na chave “InstallationFolder” no Windows Explorer. Como era de se esperar, o executável sgen.exe não está nesse diretório.

    Microsof Visual Studio 2015 - SdkToolsPath Error Fix 3

  6. Entre na pasta de outro SDK que possua esse arquivo, copie o executável e cole de volta nesta pasta. Acredito que como o executável é stand-alone (não possui dependências), pode ser qualquer versão. Eu sugiro pegar sempre a versão mais recente, respeitando a versão macro da plataforma.

    Microsof Visual Studio 2015 - SdkToolsPath Error Fix 4

  7. Após copiar o arquivo, você já pode compilar normalmente seu projeto no Visual Studio.

    Microsof Visual Studio 2015 - SdkToolsPath Error Fix 5

    Microsof Visual Studio 2015 - SdkToolsPath Error Fix 6

Obrigado pela visita e até o próximo post.