“ Service Include” ในไฟล์ csproj มีไว้เพื่ออะไร?


194

ในโซลูชัน C # ฉันเพิ่มโครงการที่มีอยู่
หลังจากนั้น Visual Studio ได้เพิ่มรายการต่อไปนี้ในไฟล์. csproj อื่น ๆ :

<ItemGroup>
    <Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
</ItemGroup>

มีไว้เพื่ออะไร
ฉันสามารถลบมันได้หรือไม่


1
วิธีการรวบรวมที่ประสบความสำเร็จหลังจากลบมัน - แต่คำถามคือ: เกิดอะไรขึ้นที่ runtime? ฉันต้องรู้ว่ามันทำอะไร
joe

คำตอบ:


260

ฉันมีกรณีที่คล้ายกันซึ่งสิ่งนี้ถูกเพิ่ม:

<ItemGroup>
  <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>

การรวมนี้จะสร้างขึ้นตามวัตถุประสงค์โดย VS2013 หากคุณสร้างโครงการทดสอบ NUnit แต่ลืมติดแท็กเป็นโครงการทดสอบตามที่อธิบายไว้ในคำตอบนี้จาก Microsoft:

พฤติกรรมนี้มีเจตนา

เพื่อสนับสนุนกรอบการทดสอบของบุคคลที่สามเช่น NUnit และ XUnit, Visual Studio 2012 ได้ทำการโหลด Test Explorer เมื่อเปิดโซลูชันไม่ว่าจะมีโครงการทดสอบหรือไม่ ไม่กี่วินาทีที่เพิ่มความล่าช้าในการเริ่มต้นและแก้ไขสถานการณ์เปิดสำหรับผู้ใช้ทั้งหมดซึ่งส่วนใหญ่ไม่ได้ใช้การทดสอบ

ใน Visual Studio 2013 เราเปลี่ยนเพื่อให้โหลดแพคเกจทดสอบ Explorer เมื่อโซลูชันประกอบด้วยโครงการทดสอบอย่างน้อยหนึ่งโครงการ โครงการทดสอบถูกระบุด้วยสองวิธีที่แตกต่างกัน โปรเจ็กต์ที่สร้างจากหนึ่งในเท็มเพลตการทดสอบหน่วยในตัวถูกระบุโดยใช้ GUID ประเภทโครงการ โครงการประเภทอื่น ๆ เช่นโครงการ Class Library ที่มีการทดสอบ XUnit หรือ NUnit นั้นจะถูกระบุโดย Test Explorer ในระหว่างการค้นพบการทดสอบครั้งแรกและ“ แท็ก” ด้วย<Service/>รายการ


8
มันยังมีประโยชน์สำหรับ VS 15.3+ หรือไม่
Jaanus Varus

5
@ JaanusVarus ใช่สิ่งนี้ยังคงเกิดขึ้นใน VS 15.4 (ฉันพยายามเข้าใจพฤติกรรมและนั่นทำให้ฉันอยู่ที่นี่) ฉันไม่แน่ใจว่าควรตัดสินใจทบทวนประสิทธิภาพหรือไม่หากนั่นคือคำถามของคุณ
Lars Kemmann

2
ยังคงเกิดขึ้นใน 15.6
dimaaan

2
@Adrian นี่คือวิธีที่คุณทำเครื่องหมายว่าเป็นโครงการทดสอบ VS พูดโดยทั่วไปว่า "ดูเหมือนว่ามันอาจเป็นโครงการทดสอบดังนั้นฉันจะทำต่อไปและทำเครื่องหมายให้คุณ" หรือเพิ่มประเภทโครงการที่กล่าวถึงในคำตอบของ Vladimirs
GalacticCowboy

2
ด้วย Visual Studio 2017 (เวอร์ชัน 15.x) ปัญหานี้เกิดขึ้นและหายไป ดูหัวข้อนี้สำหรับประวัติ เธรดนี้จะกล่าวถึงสิ่งนี้ซึ่งจะแก้ไขในที่สุดใน Visual Studio 15.7
โครงสร้างใน

35

โดยส่วนตัวฉันไม่ชอบบริการนี้เพิ่มลงในไฟล์โครงการของฉันและฉันคิดว่าการให้บริการนี้เป็นเหมือนวิธีแก้ปัญหามากกว่าเป็นวิธีแก้ไขปัญหาที่เหมาะสม ดังนั้นการทำเครื่องหมายโครงการทดสอบของคุณเป็นโครงการทดสอบที่ดูเหมือนว่าถูกต้องสำหรับฉันมากขึ้นและสามารถทำได้โดยเพิ่มสิ่งนี้เป็นครั้งแรกPropertyGroup:

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<TestProjectType>UnitTest</TestProjectType>

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}หมายถึงโครงการทดสอบและ{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}- C # สำหรับ guids ประเภทโครงการอื่น ๆ ไปที่นี่


11
ฉันชอบProjectTypeGuidsเช่นกัน แต่ถ้าคุณกำลังพัฒนาข้ามแพลตฟอร์มและใช้ MonoDevelop คุณจะไม่สามารถเปิด{3AC096D0-A1C2-E12C-1390-A8335801FDAB}โครงการได้: "MonoDevelop ไม่สนับสนุนโครงการประเภทนี้" IDE ทั้งสองดูเหมือนว่ามีความสุขถ้าคุณเพียงแค่ลบประเภทโครงการทดสอบ GUID
WynandB

3
ฉันสงสัยว่า <TestProjectType> ประเภทใดที่เป็นไปได้บ้าง ไม่พบข้อมูลใด ๆ เกี่ยวกับมัน
J Pollack

12

สิ่งที่ดีเกี่ยวกับGUID ที่รู้จักกันดี / คงที่ก็คือพวกมันมีเอกลักษณ์ที่ไม่เหมือนใครและง่ายต่อการค้นหาใน Google ซึ่งฉันทำและพบ: สิ่งนี้และสิ่งนี้รวมถึงเพลงฮิตที่น่าสนใจอื่น ๆ
ดูเหมือนว่านี่เป็นข้อผิดพลาดที่รู้จักในเครื่องมือ T4 DSL ซึ่งมาพร้อมกับ SDK และโชคดีที่มันง่ายพอที่จะแก้ไขได้ด้วยการเปลี่ยนรีจิสตรีคีย์


8
และตอนนี้เมื่อฉันค้นหาฉันได้รับคำถาม SO ;-)
binki

เพื่อให้ชัดเจนข้อผิดพลาด T4 DSL คือแท็กบริการB4F97281-0DBD-4835-9ED8-7DFB966E87FFถูกเพิ่มในโครงการทั้งหมดแม้ว่าพวกเขาจะไม่ได้ใช้ T4 จุดบกพร่องนั้นได้รับการแก้ไขใน Visual Studio 2008 แท็กบริการยังคงถูกเพิ่มเข้าไปในโครงการที่ใช้ T4 (แม้ว่า GUID จะแตกต่างกัน) นี่ยังอยู่ในกรณีใน VS2017
duncanp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.