Untuk apa "Layanan Termasuk" dalam file csproj?

194

Dalam solusi C #, saya menambahkan proyek yang sudah ada.
Setelah itu, Visual Studio telah menambahkan entri berikut di file .csproj lainnya:

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

Untuk apa ini?
Bisakah saya menghapusnya?

joe
sumber
1
Solusi dikompilasi dengan sukses setelah menghapusnya - tetapi apakah pertanyaannya adalah: apa yang terjadi pada saat runtime? Saya harus tahu apa fungsinya.
joe

Jawaban:

260

Saya memiliki kasus serupa, di mana ini ditambahkan:

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

Inklusi ini ternyata dibuat secara sengaja oleh VS2013 jika Anda membuat proyek uji NUnit, tetapi lupa untuk menandainya sebagai proyek uji, seperti yang dijelaskan dalam jawaban ini dari Microsoft:

Perilaku ini disengaja.

Untuk mendukung kerangka uji pihak ketiga, seperti NUnit dan XUnit, Visual Studio 2012 memuat Test Explorer pada solusi terbuka, terlepas dari apakah itu berisi proyek pengujian. Ini menambahkan detik keterlambatan untuk startup dan solusi skenario terbuka untuk semua pengguna, yang sebagian besar tidak menggunakan tes.

Dalam Visual Studio 2013, kami mengubahnya sehingga paket Test Explorer dimuat hanya ketika solusinya berisi satu atau lebih proyek pengujian. Proyek uji diidentifikasi dalam dua cara berbeda. Proyek yang dibuat dari salah satu templat proyek pengujian unit bawaan diidentifikasi menggunakan GUID jenis proyek. Jenis proyek lainnya, seperti proyek Perpustakaan Kelas dengan tes XUnit atau NUnit, diidentifikasi oleh Test Explorer selama penemuan tes pertama dan "ditandai" dengan <Service/>item tersebut.

avandeursen
sumber
8
Apakah masih berguna untuk VS 15.3+?
Jaanus Varus
5
@ JaanusVarus Ya, ini masih terjadi di VS 15.4 (saya mencoba untuk memahami perilaku dan yang membawa saya ke sini). Saya tidak yakin apakah keputusan kinerja harus ditinjau kembali, apakah itu pertanyaan Anda.
Lars Kemmann
2
Masih terjadi di 15,6
dimaaan
2
@Adrian Ini adalah bagaimana Anda menandainya sebagai proyek uji. VS pada dasarnya mengatakan, "Ini sepertinya proyek uji coba, jadi saya akan langsung saja dan tandai untuk Anda." Atau tambahkan jenis proyek yang disebutkan dalam jawaban Vladimirs.
GalacticCowboy
2
Dengan Visual Studio 2017 (Versi 15.x), masalah ini datang dan pergi. Lihat utas ini untuk riwayat. Utas ini juga menyebutkan ini akhirnya akan diperbaiki di Visual Studio 15.7
Structed
35

Secara pribadi saya tidak suka layanan ini ditambahkan ke file proyek saya dan saya pikir memilikinya lebih seperti solusi daripada solusi yang tepat. Jadi menandai proyek pengujian Anda sebagai proyek pengujian tampaknya lebih tepat bagi saya dan ini dapat dicapai dengan menambahkan ini ke yang pertama PropertyGroup:

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

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}berarti Uji Proyek dan {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}- C #. Untuk petunjuk jenis proyek lainnya, buka di sini

Vladimirs
sumber
11
^ Saya lebih suka ProjectTypeGuidsjuga tetapi jika Anda melakukan pengembangan lintas-platform dan menggunakan MonoDevelop Anda tidak akan dapat membuka {3AC096D0-A1C2-E12C-1390-A8335801FDAB}proyek: "Jenis proyek ini tidak didukung oleh MonoDevelop". Kedua IDE tampaknya senang jika Anda cukup menghapus GUID jenis proyek uji.
WynandB
3
Saya bertanya-tanya apa jenis yang mungkin untuk <TestProjectType>? Tidak dapat menemukan info tentang itu.
J Pollack
12

Hal yang baik tentang GUID yang terkenal / konstan adalah bahwa mereka cukup unik dan karenanya sangat mudah dicari di Google. Yang saya lakukan, dan temukan: ini dan ini , serta hit menarik lainnya.
Sepertinya ini sebenarnya adalah bug yang dikenal dalam alat T4 DSL yang dilengkapi dengan SDK. Dan untungnya itu cukup mudah untuk diselesaikan dengan mengubah beberapa kunci registri.

Polyfun
sumber
8
Dan sekarang ketika saya mencarinya saya mendapatkan pertanyaan SO ini ;-).
binki
Untuk lebih jelasnya, bug T4 DSL adalah bahwa tag layanan B4F97281-0DBD-4835-9ED8-7DFB966E87FF ditambahkan ke semua proyek, bahkan jika mereka tidak menggunakan T4. Bug itu diperbaiki di Visual Studio 2008. Tag layanan masih ditambahkan ke proyek yang menggunakan T4 (meskipun GUID berbeda). Ini masih dalam kasus di VS2017.
duncanp