2013-09-04 7 views
138

In una soluzione C#, ho aggiunto un progetto esistente.
Dopo di che, Visual Studio ha aggiunto la seguente voce in altri file Csproj:In cosa consiste "Service Include" in un file csproj?

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

Cosa è?
Posso eliminarlo?

+0

La soluzione è stata compilata correttamente dopo averlo eliminato, ma la domanda è: cosa succede al runtime? Devo sapere cosa fa – joe

risposta

203

ho avuto un caso simile, in cui questo è stato aggiunto:

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

Questa inclusione risulta essere generato appositamente da VS2013 se si crea un progetto di test NUnit, ma dimentica di etichettare come progetto di test, come descritto in questo answer 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 contenesse progetti di test. Questo ha aggiunto secondi di ritardo all'avvio e agli scenari di apertura delle soluzioni per tutti gli utenti, la maggior parte dei quali non usa test.

In Visual Studio 2013, l'abbiamo modificato in modo che il pacchetto Test Explorer sia 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 test dell'unità integrati sono identificati utilizzando i GUID del tipo di progetto. Altri tipi di progetti, come il progetto Libreria di classi con test XUnit o NUnit, vengono identificati da Esplora test durante il primo rilevamento dei test e "contrassegnati" con l'elemento <Service/>.

+3

È ancora utile per VS 15.3+? –

+4

@JaanusVarus Sì, questo si verifica ancora in VS 15.4 (stavo cercando di capire il comportamento e questo mi ha portato qui). Non sono sicuro che la decisione sulla performance debba essere rivista, se questa era la tua domanda. –

10

La cosa buona dei GUID è che sono praticamente unici e quindi molto facili da cercare in Google. Cosa ho fatto e ho trovato: this e this, 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 risolvere cambiando alcune chiavi di registro.

+4

E ora quando lo cerco ho questa domanda SO ;-). – binki

+2

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/19034960) –

23

Personalmente non mi piace questo servizio aggiunto ai miei file di progetto e penso che averlo sia più come una soluzione alternativa piuttosto che una soluzione adeguata. Quindi, selezionare tutti i tuoi progetti di test come progetti di test sembra più corretto per me e questo può essere ottenuto con l'aggiunta di questo alla prima PropertyGroup:

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

{3AC096D0-A1C2-E12C-1390-A8335801FDAB} significa progetto di test e {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - C#. Per altri tipi di progetto guids vai here

+7

^Preferisco anche 'ProjectTypeGuids', ma se stai facendo uno sviluppo multipiattaforma e usi MonoDevelop non potrai 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 tipo di progetto di test GUID. – WynandB

+2

Mi chiedo quali sono altri tipi possibili per ? Non ho trovato alcuna informazione a riguardo. –