A cosa serve “Includi servizio” in un file csproj?


194

In una soluzione C #, ho aggiunto un progetto esistente.
Successivamente, Visual Studio ha aggiunto la seguente voce in altri file .csproj:

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

A cosa serve questo?
Posso cancellarlo?


1
La soluzione è stata compilata correttamente dopo averla eliminata, ma la domanda è: cosa succede in fase di esecuzione? Devo sapere cosa fa.
joe

Risposte:


260

Ho avuto un caso simile, in cui è stato aggiunto:

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

Questa inclusione risulta essere generata appositamente da VS2013 se si crea un progetto di test NUnit, ma si dimentica di etichettarlo come progetto di test, come descritto in questa risposta da Microsoft:

Questo comportamento è intenzionale.

Per supportare framework di test di terze parti, come NUnit e XUnit, Visual Studio 2012 ha caricato Test Explorer su soluzione aperta, indipendentemente dal fatto che contenga progetti di test. Ciò ha aggiunto secondi di ritardo all'avvio e alla soluzione di scenari aperti per tutti gli utenti, la maggior parte dei quali non utilizza i test.

In Visual Studio 2013, l'abbiamo modificato in modo che il pacchetto Test Explorer venga caricato solo quando la soluzione contiene uno o più progetti di test. I progetti di test sono identificati in due modi diversi. I progetti creati da uno dei modelli di progetto di unit test integrati vengono identificati mediante GUID di tipo progetto. Altri tipi di progetti, come il progetto Libreria di classi con test XUnit o NUnit, vengono identificati da Test Explorer durante il primo rilevamento del test e "taggati" con l' <Service/>elemento.


8
È ancora utile per VS 15.3+?
Jaanus Varus,

5
@JaanusVarus Sì, questo si verifica ancora in VS 15.4 (stavo cercando di capire il comportamento e che mi ha portato qui). Non sono sicuro che la decisione sulla performance debba essere rivisitata, se quella fosse la tua domanda.
Lars Kemmann,

2
Si verifica ancora nel 15.6
dimaaan

2
@Adrian Ecco come lo contrassegni come progetto di test. VS sta sostanzialmente dicendo "Sembra che sia probabilmente un progetto di test, quindi vado avanti e lo segnerò per te". Oppure aggiungi il tipo di progetto menzionato nella risposta di Vladimirs.
GalacticCowboy,

2
Con Visual Studio 2017 (versione 15.x), questo problema è emerso e scomparso. Vedi questa discussione per una cronologia. Questo thread menziona anche che sarà finalmente risolto in Visual Studio 15.7
Structed

35

Personalmente non mi piace che questo servizio sia stato aggiunto ai miei file di progetto e penso che averlo sia più una soluzione alternativa che una soluzione adeguata. Quindi contrassegnare i tuoi progetti di test come progetti di test mi sembra più corretto e questo può essere ottenuto aggiungendo questo al primo PropertyGroup:

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

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}significa Progetto di prova e {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}- C #. Per altre guide sul tipo di progetto, vai qui


11
^ Preferisco ProjectTypeGuidsanche io, ma se stai realizzando uno sviluppo multipiattaforma e usando MonoDevelop non sarai in grado di aprire {3AC096D0-A1C2-E12C-1390-A8335801FDAB}progetti: "Questo tipo di progetto non è supportato da MonoDevelop". Entrambi gli IDE sembrano felici se si rimuove semplicemente il GUID del tipo di progetto di test.
WynandB,

3
Mi chiedo quali sono altri tipi possibili per <TestProjectType>? Impossibile trovare informazioni al riguardo.
J Pollack,

12

La cosa buona dei GUID noti / costanti è che sono praticamente unici e quindi molto facili da cercare su Google. Cosa che ho fatto e trovato: questo e questo , così come altri successi interessanti.
Sembra che questo sia in realtà un bug noto nello strumento T4 DSL fornito con l'SDK. E fortunatamente è abbastanza facile da risolvere cambiando alcune chiavi di registro.


8
E ora quando lo cerco ottengo questa domanda SO ;-).
binki,

Per essere chiari, quel bug DSL T4 era che il tag di servizio B4F97281-0DBD-4835-9ED8-7DFB966E87FF veniva aggiunto a tutti i progetti, anche se non usavano T4. Il bug è stato corretto in Visual Studio 2008. Un tag di servizio è ancora aggiunto ai progetti che utilizzano T4 (sebbene il GUID sia diverso). Questo è ancora nel caso di VS2017.
Duncanp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.