Cara men-debug ekstensi Visual Studio

93

Saya hanya menulis ekstensi VSIX untuk Visual Studio 2010 dan tidak tahu cara men-debugnya.

Salah satu metode yang jelas adalah mengeluarkan pesan. Template ekstensi menggunakan Trace.WriteLine(). Tapi di mana menemukan keluarannya?

Lu55
sumber

Jawaban:

184

Ekstensi Visual Studio dapat di-debug seperti aplikasi lainnya. Anda hanya perlu menyiapkan pengalaman debug untuk meluncurkan devenv dengan ekstensi yang dimuat. Coba berikut ini

  • Klik kanan pada proyek dan pilih Properties
  • Buka Tab Debug

Klik di tombol radio untuk Start External Program. Arahkan ke biner devenv.exe. Di komputer saya, ini terletak di

C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe

Pada mesin non x64 meskipun Anda dapat menghapus bagian "(x86)".

Kemudian setel argumen baris perintah ke /rootsuffix Exp. Ini memberitahu Visual Studio untuk menggunakan sarang eksperimental daripada sarang konfigurasi normal. Secara default, ekstensi VSIX saat dibuat akan mendaftarkan dirinya di sarang percobaan.

Sekarang Anda dapat F5 dan itu akan memulai Visual Studio dengan VSIX Anda sebagai ekstensi yang tersedia.

JaredPar
sumber
terima kasih atas jawaban ini, memecahkan masalah dalam satu pukulan. Terima kasih banyak!
Richard Griffiths
@JaredPar - apakah ada cara untuk memberi tahu ekstensi vs2012 untuk mendaftarkan dirinya di sarang percobaan pratinjau vs2015?
Srikanth Venugopalan
1
Tampaknya ini hanya berfungsi jika versi yang Anda gunakan untuk men-debug dan menguji sama. Jadi, Anda tidak dapat melakukan debug pada 2013 dan menjalankan ekstensi pada 2015. @SrikanthVenugopalan
Maria Ines Parnisari
@miparnisari - ya, sepertinya begitu. Agak menyebalkan, jika Anda mendukung banyak versi.
Srikanth Venugopalan
2
Hai, apa maksud Anda ini akan mulai VS dengan VSIX saya sebagai "ekstensi yang tersedia"? Di mana saya dapat menemukan ekstensi yang tersedia? Ketika saya pergi ke Tools -> Extensions and Updates, saya hanya melihat "Installed", "Online" dan "Updates".
pabram
54

Jawaban yang diterima oleh @JaredPar secara teknis benar, tetapi menderita karena Anda perlu mengulanginya untuk setiap pengembang, setiap kali Anda mendapatkan salinan kode baru, dan setiap kali csproj.userfile dihapus. Jika Anda melakukannya dengan cara itu, pengaturan disimpan di dalam csproj.userfile.

Pilihan yang lebih baik adalah meletakkan pengaturan di csprojfile agar tidak hilang. Sayangnya, Visual Studio tidak mengizinkan Anda melakukan ini secara otomatis, jadi Anda perlu menambahkan pengaturan secara manual. Untungnya, pengaturannya sama untuk proyek apa pun.

Klik kanan dan keluarkan proyek, lalu klik kanan lagi dan edit csprojfile file proyek. Dalam XML, tambahkan berikut untuk pertama PropertyGroup, misalnya setelah TargetFramework.

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

Ini memiliki keuntungan sebagai berikut;

  • Ini mengaturnya untuk debug dan rilis
  • Ini menjalankan versi Visual Studio apa pun yang sedang Anda jalankan
  • Itu diperiksa ke dalam kontrol sumber, jadi setiap pengembang tidak perlu mengingat bagaimana melakukannya :)

Seperti yang @MBulli nyatakan di komentar, jika Anda telah membuat perubahan pada jawaban yang diterima, hapus *.csproj.userfile Anda karena pengaturan di dalamnya akan menimpa yang Anda tambahkan ke csprojfile utama .

Rob Prouse
sumber
6
Pastikan untuk menghapus file * .csproj.user karena pengaturan pengguna lebih diutamakan daripada pengaturan proyek.
MBulli
Jawaban bagus, terima kasih! Jauh lebih efisien daripada yang diterima.
Zverev Evgeniy
Bekerja dengan sempurna untuk vs 2019
x0n
2

The OutputWindowHelper.OutputString metode menulis untuk 'Umum' panel jendela output (Ctrl Alt o). Saya menambahkan baris ini di referensi .csproj saya untuk mendapatkan ini di VS 2013

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

Lihat juga jawaban ini .

tcb
sumber
Catatan OutputWindowHelper tidak ada di Visual Studio 2015. Mesin dengan hanya VS2015 akan mengeluarkan kesalahan jika ini dipanggil. Lihat juga github.com/landofjoe/NuspecPackager/issues/1
Quango
0

Jika Anda mencoba men-debug UnitTestExtension, Anda juga harus memasang debugger ke proses vstest. *. Exe seperti yang dijelaskan di sini . Jika tidak, Anda mungkin melihat titik putus aktif tetapi debugger tidak akan pernah berhasil.

smkanadl.dll
sumber