Bir csproj dosyasındaki “Service Include” ne işe yarar?


194

Bir C # çözümünde, mevcut bir projeyi ekledim.
Bundan sonra, Visual Studio diğer girdiyi aşağıdaki .csproj dosyalarına ekledi:

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

Bu ne için?
Silebilir miyim?


1
Çözüm sildikten sonra başarıyla derlendi - ama soru şu: çalışma zamanında ne oluyor? Ne yaptığını bilmek zorundayım.
joe

Yanıtlar:


260

Bu eklendi, benzer bir dava vardı:

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

Bu içerme, bir NUnit test projesi oluşturursanız, ancak Microsoft'un bu yanıtında açıklandığı gibi test projesi olarak etiketlemeyi unutursanız VS2013 tarafından bilerek üretilmiştir :

Bu davranış kasıtlıdır.

NUnit ve XUnit gibi üçüncü taraf test çerçevelerini desteklemek için, Visual Studio 2012 Test Gezgini'ni test projeleri içerip içermediğine bakılmaksızın çözüme açık olarak yükledi. Bu, çoğunluğu test kullanmayan tüm kullanıcılar için başlatma ve çözüm açık senaryolarına birkaç saniye gecikme ekledi.

Visual Studio 2013'te, bunu Test Gezgini paketinin yalnızca çözüm bir veya daha fazla test projesi içerdiğinde yüklenecek şekilde değiştirdik. Test projeleri iki farklı şekilde tanımlanır. Yerleşik birim testi proje şablonlarından birinden oluşturulan projeler, proje tipi GUID'ler kullanılarak tanımlanır. XUnit veya NUnit testleriyle Sınıf Kütüphanesi projesi gibi diğer proje türleri, ilk test keşfi sırasında Test Explorer tarafından tanımlanır ve <Service/>öğeyle “etiketlenir” .


8
VS 15.3+ için hala kullanışlı mı?
Jaanus Varus

5
@JaanusVarus Evet, bu hala VS 15.4'te gerçekleşiyor (davranışı anlamaya çalışıyordum ve bu beni buraya getirdi). Performans kararının yeniden gözden geçirilmesi gerekip gerekmediğinden emin değilim.
Lars Kemmann

2
Hala 15.6
dimaaan

2
@Adrian Bu bir test projesi olarak işaretlemek nasıl. VS temelde "Bu muhtemelen bir test projesi gibi görünüyor, bu yüzden devam edip sizin için işaretleyeceğim." Veya Vladimirs'in cevabında belirtilen proje türünü ekleyin.
GalacticCowboy

2
Visual Studio 2017 (Sürüm 15.x) ile bu sorun gelip gitti. Geçmiş için bu konuya bakın . Bu iş parçacığı da bunun Visual Studio
15.7'de yapılandırıldığından bahsediyor

35

Şahsen bu hizmetin proje dosyalarıma eklenmesinden hoşlanmıyorum ve bunun uygun bir çözümden ziyade bir geçici çözüm gibi olduğunu düşünüyorum. Olarak test projeleri işaretleme Yani deney projeleri bana daha doğru görünüyor ve bu ilk bu ekleyerek elde edilebilir PropertyGroup:

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

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}Test Projesi ve {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}- C # anlamına gelir . Diğer proje tipi kılavuzları için buraya gidin


11
^ Ben de tercih ederim ProjectTypeGuidsama platformlar arası geliştirme yapıyorsanız ve MonoDevelop kullanıyorsanız {3AC096D0-A1C2-E12C-1390-A8335801FDAB}projeleri açamayacaksınız : "Bu proje türü MonoDevelop tarafından desteklenmiyor". Test projesi türü GUID'sini kaldırırsanız her iki IDE de mutlu görünür.
WynandB

3
Acaba <TestProjectType> için diğer olası türleri nelerdir? Bu konuda herhangi bir bilgi bulunamadı.
J Pollack

12

İyi bilinen / sabit GUID'lerle ilgili iyi olan şey , oldukça benzersiz olmaları ve bu nedenle Google'da aranmaları çok kolay olmasıdır. Hangi yaptım ve buldum: bu ve bu , yanı sıra diğer ilginç hit.
Bu aslında SDK ile birlikte gelen T4 DSL aracında bilinen bir hata gibi görünüyor. Ve neyse ki bazı kayıt defteri anahtarlarını değiştirerek çözülmesi yeterince kolaydır.


8
Ve şimdi aradığımda bu SO sorusunu alıyorum ;-).
binki

Açıkçası , T4 DSL hatası, B4F97281-0DBD-4835-9ED8-7DFB966E87FF hizmet etiketinin , T4 kullanmasalar bile tüm projelere eklenmiş olmasıydı . Bu hata Visual Studio 2008'de giderilmiştir. T4 kullanan projelere hala bir hizmet etiketi eklenmiştir (GUID farklı olsa da). Bu VS2017'de hala geçerlidir.
duncanp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.