Como depurar extensões do Visual Studio

93

Estou apenas escrevendo uma extensão VSIX para Visual Studio 2010 e não consigo descobrir como depurá-la.

Um método óbvio é enviar mensagens. Usos de modelo de extensão Trace.WriteLine(). Mas onde encontrar sua saída?

Lu55
fonte

Respostas:

184

As extensões do Visual Studio podem ser depuradas como qualquer outro aplicativo. Você só precisa configurar a experiência de depuração para iniciar o devenv com a extensão carregada. Tente o seguinte

  • Clique com o botão direito no projeto e selecione Propriedades
  • Vá para a guia Depurar

Clique no botão de rádio para Start External Program. Aponte para o binário devenv.exe. Na minha máquina está localizado em

C: \ Arquivos de programas (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe

Em uma máquina não x64, embora você possa remover a parte "(x86)".

Em seguida, defina os argumentos da linha de comando como /rootsuffix Exp. Isso informa ao Visual Studio para usar o hive experimental em vez do hive de configuração normal. Por padrão, as extensões VSIX quando construídas se registrarão na seção experimental.

Agora você pode usar o F5 e ele iniciará o Visual Studio com seu VSIX como uma extensão disponível.

JaredPar
fonte
obrigado por esta resposta, resolveu um problema em um hit. Muito grato!
Richard Griffiths
@JaredPar - há uma maneira de dizer à extensão do vs2012 para se registrar na seção experimental da visualização do vs2015?
Srikanth Venugopalan
1
Parece que isso funciona apenas se as versões que você usa para depurar e testar são as mesmas. Então você não pode depurar em 2013 e executar a extensão em 2015. @SrikanthVenugopalan
Maria Ines Parnisari
@miparnisari - sim, parece. No entanto, é meio chato se você oferece suporte a várias versões.
Srikanth Venugopalan,
2
Olá, o que você quer dizer com isso vai iniciar o VS com meu VSIX como uma "extensão disponível"? Onde encontro as extensões disponíveis? Quando vou para Ferramentas -> Extensões e atualizações, vejo apenas "Instalado", "Online" e "Atualizações".
pabrams
54

A resposta aceita por @JaredPar é tecnicamente correta, mas sofre com o fato de que você precisa refazê-la para cada desenvolvedor, toda vez que obtém uma nova cópia do código e sempre que o csproj.userarquivo é excluído. Ao fazer isso dessa forma, as configurações são salvas no csproj.userarquivo.

A melhor opção é colocar as configurações no csprojarquivo para que não sejam perdidas. Infelizmente, o Visual Studio não permite que você faça isso automaticamente, então você precisa adicionar manualmente as configurações. Felizmente, as configurações são as mesmas para qualquer projeto.

Clique com o botão direito e descarregue o projeto, clique com o botão direito novamente e edite o csprojarquivo do projeto. No XML, adicione o seguinte ao primeiro PropertyGroup, por exemplo, logo depois TargetFramework.

<StartAction>Program</StartAction>
<StartProgram>$(DevEnvDir)\devenv.exe</StartProgram>
<StartArguments>/rootsuffix Exp</StartArguments>

Isso tem as seguintes vantagens;

  • Ele configura para depuração e liberação
  • Ele executa qualquer versão do Visual Studio que você está executando atualmente
  • Ele é verificado no controle de origem, de modo que todo desenvolvedor não precisa se lembrar de como fazer isso :)

Como @MBulli afirma nos comentários, se você fez as alterações na resposta aceita, exclua seu *.csproj.userarquivo porque as configurações nele substituirão as que você adicionou ao csprojarquivo principal .

Rob Prouse
fonte
6
Certifique-se de excluir o arquivo * .csproj.user porque as configurações do usuário têm precedência sobre as configurações do projeto.
MBulli
Ótima resposta, obrigado! Muito mais eficiente do que o aceito.
Zverev Evgeniy
Funcionou perfeitamente para o vs 2019
x0 em
2

O método OutputWindowHelper.OutputString grava no painel da janela de saída 'Geral' (Ctrl Alt o). Eu adicionei esta linha em minhas referências .csproj para conseguir isso no VS 2013

<Reference Include="Microsoft.VisualStudio.Services.Integration, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />

Veja também esta resposta .

tcb
fonte
Observação OutputWindowHelper não existe no Visual Studio 2015. Uma máquina com apenas VS2015 lançará um erro se for chamado. Veja também github.com/landofjoe/NuspecPackager/issues/1
Quango
0

Se você tentar depurar um UnitTestExtension, também deverá anexar o depurador aos processos vstest. *. Exe como descrito aqui . Caso contrário, você poderá ver o ponto de interrupção de ativação, mas o depurador nunca o atingirá.

smkanadl
fonte