วิธีการดีบักส่วนขยาย Visual Studio


94

ฉันแค่เขียนส่วนขยาย VSIX สำหรับ Visual Studio 2010 และไม่สามารถหาวิธีแก้จุดบกพร่องได้

วิธีหนึ่งที่ชัดเจนคือการส่งออกข้อความ Trace.WriteLine()การขยายการใช้แม่แบบ แต่จะหาได้ที่ไหน?

คำตอบ:


186

Visual Studio Extensions สามารถแก้ไขได้เหมือนกับแอปพลิเคชันอื่น ๆ คุณต้องตั้งค่าประสบการณ์การดีบักเพื่อเปิดใช้งาน devenv ด้วยส่วนขยายที่โหลด ลองทำดังต่อไปนี้

  • คลิกขวาที่โครงการและเลือกคุณสมบัติ
  • ไปที่แท็บ Debug

Start External Programคลิกที่ปุ่มวิทยุ ชี้ไปที่ไบนารี devenv.exe บนเครื่องของฉันมันอยู่ที่

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

ในเครื่องที่ไม่ใช่ x64 แม้ว่าคุณจะสามารถลบส่วน "(x86)" ได้

/rootsuffix Expจากนั้นตั้งค่าอาร์กิวเมนต์บรรทัดคำสั่ง สิ่งนี้จะบอก Visual Studio ให้ใช้กลุ่มทดลองแทนกลุ่มการกำหนดค่าปกติ โดยค่าเริ่มต้นส่วนขยาย VSIX เมื่อสร้างขึ้นจะลงทะเบียนตัวเองในกลุ่มทดลอง

ตอนนี้คุณสามารถ F5 และจะเริ่ม Visual Studio ด้วย VSIX ของคุณเป็นส่วนขยายที่พร้อมใช้งาน


ขอบคุณสำหรับคำตอบนี้แก้ไขปัญหาได้ในครั้งเดียว ภาระหน้าที่มาก!
Richard Griffiths

@JaredPar - มีวิธีบอกส่วนขยาย vs2012 เพื่อลงทะเบียนตัวเองในกลุ่มทดลองของการดูตัวอย่าง vs2015 หรือไม่?
Srikanth Venugopalan

1
ดูเหมือนว่าจะใช้ได้ก็ต่อเมื่อเวอร์ชันที่คุณใช้ในการดีบักและทดสอบเหมือนกัน ดังนั้นคุณจึงไม่สามารถดีบักในปี 2013 และเรียกใช้ส่วนขยายในปี 2015 ได้ @SrikanthVenugopalan
Maria Ines Parnisari

@miparnisari - ใช่แล้วดูเหมือนว่า หากคุณรองรับหลายเวอร์ชัน
Srikanth Venugopalan

2
สวัสดีคุณหมายความว่าอย่างไรมันจะเริ่ม VS ด้วย VSIX ของฉันเป็น "ส่วนขยายที่ใช้ได้" ฉันจะหาส่วนขยายที่ใช้ได้ที่ไหน? เมื่อฉันไปที่ Tools -> Extensions and Updates ฉันจะเห็นเฉพาะ "Installed", "Online" และ "Updates" เท่านั้น
pabrams

54

คำตอบที่ยอมรับโดย @JaredPar นั้นถูกต้องในทางเทคนิค แต่ต้องทนทุกข์ทรมานจากความจริงที่ว่าคุณต้องทำซ้ำสำหรับนักพัฒนาทุกคนทุกครั้งที่คุณได้รับสำเนาใหม่ของรหัสและทุกครั้งที่csproj.userไฟล์ถูกลบ เมื่อคุณทำเช่นนั้นการตั้งค่าจะถูกบันทึกไว้ในcsproj.userไฟล์

ตัวเลือกที่ดีกว่าคือใส่การตั้งค่าในcsprojไฟล์เพื่อไม่ให้สูญหาย ขออภัย Visual Studio ไม่อนุญาตให้คุณดำเนินการนี้โดยอัตโนมัติดังนั้นคุณต้องเพิ่มการตั้งค่าด้วยตนเอง โชคดีที่การตั้งค่าเหมือนกันสำหรับทุกโครงการ

คลิกขวาและยกเลิกการโหลดโครงการจากนั้นคลิกขวาอีกครั้งและแก้ไขcsprojไฟล์ไฟล์โครงการ ใน XML เพิ่มต่อไปนี้จะเป็นครั้งแรกเช่นขวาหลังจากPropertyGroupTargetFramework

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

ซึ่งมีข้อดีดังต่อไปนี้

  • มันตั้งค่าสำหรับการดีบักและปล่อย
  • เรียกใช้ Visual Studio เวอร์ชันใดก็ได้ที่คุณกำลังใช้งานอยู่
  • มันถูกตรวจสอบในการควบคุมแหล่งที่มาดังนั้นนักพัฒนาทุกคนไม่ต้องจำวิธีการทำ :)

ตามที่ @MBulli ระบุไว้ในความคิดเห็นหากคุณได้ทำการเปลี่ยนแปลงในคำตอบที่ยอมรับแล้วให้ลบ*.csproj.userไฟล์ของคุณเนื่องจากการตั้งค่าในไฟล์จะแทนที่ไฟล์ที่คุณเพิ่มลงในcsprojไฟล์หลัก


6
อย่าลืมลบไฟล์ * .csproj.user เนื่องจากการตั้งค่าผู้ใช้มีความสำคัญเหนือการตั้งค่าโครงการ
MBulli

คำตอบที่ดีขอบคุณ! มีประสิทธิภาพมากกว่าที่ยอมรับ
Zverev Evgeniy

ทำงานได้อย่างสมบูรณ์แบบสำหรับ vs 2019
x0n

2

OutputWindowHelper.OutputStringวิธีเขียนไป 'ทั่วไป' บานหน้าต่างหน้าต่างออก (Ctrl Alt o) ฉันเพิ่มบรรทัดนี้ในการอ้างอิง. csproj ของฉันเพื่อรับสิ่งนี้ใน VS 2013

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

ดูคำตอบนี้ด้วย


หมายเหตุไม่มี OutputWindowHelper ใน Visual Studio 2015 เครื่องที่มี VS2015 เท่านั้นที่จะส่งข้อผิดพลาดหากมีการเรียกสิ่งนี้ โปรดดูที่github.com/landofjoe/NuspecPackager/issues/1
Quango

0

ถ้าคุณพยายามที่จะแก้ปัญหา UnitTestExtension คุณควรแนบการดีบักเกอร์เพื่อ vstest ได้. *. exe กระบวนการเช่น descibed ที่นี่ มิฉะนั้นคุณอาจเห็นจุดพักที่เปิดใช้งาน แต่ดีบักเกอร์จะไม่ทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.