À quoi sert «Service Inclure» dans un fichier csproj?

194

Dans une solution C #, j'ai ajouté un projet existant.
Après cela, Visual Studio a ajouté l'entrée suivante dans d'autres fichiers .csproj:

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

À quoi ça sert?
Puis-je le supprimer?

Joe
la source
1
La solution a été compilée avec succès après sa suppression - mais la question est: que se passe-t-il à l'exécution? Je dois savoir ce que ça fait.
joe

Réponses:

260

J'ai eu un cas similaire, où cela a été ajouté:

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

Cette inclusion s'avère être générée exprès par VS2013 si vous créez un projet de test NUnit, mais oubliez de le marquer comme projet de test, comme décrit dans cette réponse de Microsoft:

Ce comportement est intentionnel.

Pour prendre en charge les frameworks de test tiers, comme NUnit et XUnit, Visual Studio 2012 a chargé Test Explorer sur la solution ouverte, qu'elle contienne ou non des projets de test. Cela a ajouté quelques secondes de retard au démarrage et aux scénarios d'ouverture de solution pour tous les utilisateurs, dont la majorité n'utilisent pas de tests.

Dans Visual Studio 2013, nous l'avons modifié afin que le package Test Explorer soit chargé uniquement lorsque la solution contient un ou plusieurs projets de test. Les projets de test sont identifiés de deux manières différentes. Les projets créés à partir de l'un des modèles de projet de test unitaire intégrés sont identifiés à l'aide de GUID de type de projet. D'autres types de projets, tels que le projet Bibliothèque de classes avec des tests XUnit ou NUnit, sont identifiés par l'Explorateur de tests lors de la première découverte de test et «balisés» avec l' <Service/>élément.

avandeursen
la source
8
Est-il toujours utile pour VS 15.3+?
Jaanus Varus
5
@JaanusVarus Oui, cela se produit toujours dans VS 15.4 (j'essayais de comprendre le comportement et cela m'a conduit ici). Je ne sais pas si la décision sur le rendement devrait être réexaminée, si telle était votre question.
Lars Kemmann
2
Se
2
@Adrian Voici comment vous le marquez comme projet de test. VS dit essentiellement: "Il semble que ce soit probablement un projet de test, donc je vais simplement aller de l'avant et marquer cela pour vous." Ou ajoutez le type de projet mentionné dans la réponse de Vladimirs.
GalacticCowboy
2
Avec Visual Studio 2017 (version 15.x), ce problème est survenu et a disparu. Voir ce fil pour une histoire. Ce fil mentionne également que cela sera finalement corrigé dans Visual Studio 15.7
Structuré le
35

Personnellement, je n'aime pas que ce service soit ajouté à mes fichiers de projet et je pense que l'avoir ressemble plus à une solution de contournement qu'à une solution appropriée. Donc, marquer vos projets de test comme des projets de test me semble plus correct et cela peut être réalisé en ajoutant ceci au premier PropertyGroup:

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

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}signifie Test Project et {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}- C #. Pour d'autres guides de type de projet, cliquez ici

Vladimirs
la source
11
^ Je préfère ProjectTypeGuids aussi, mais si vous faites du développement multiplateforme et que vous utilisez MonoDevelop, vous ne pourrez pas ouvrir de {3AC096D0-A1C2-E12C-1390-A8335801FDAB}projets: "Ce type de projet n'est pas pris en charge par MonoDevelop". Les deux IDE semblent heureux si vous supprimez simplement le GUID du type de projet de test.
WynandB
3
Je me demande quels sont les autres types possibles pour le <TestProjectType>? Impossible de trouver des informations à ce sujet.
J Pollack
12

La bonne chose à propos de des GUID connus / constants est qu'ils sont à peu près uniques et donc très faciles à rechercher dans Google. Ce que j'ai fait et trouvé: ceci et cela , ainsi que d'autres succès intéressants.
Il semble que ce soit un bogue connu de l'outil T4 DSL fourni avec le SDK. Et heureusement, il est assez facile à résoudre en modifiant certaines clés de registre.

Polyfun
la source
8
Et maintenant, quand je le recherche, je reçois cette question SO ;-).
binki
Juste pour être clair, ce bogue T4 DSL était que la balise de service B4F97281-0DBD-4835-9ED8-7DFB966E87FF était ajoutée à tous les projets, même s'ils n'utilisaient pas T4. Ce bogue a été corrigé dans Visual Studio 2008. Une étiquette de service est toujours ajoutée aux projets qui utilisent T4 (bien que le GUID soit différent). C'est toujours le cas dans VS2017.
duncanp