Wofür ist "Service Include" in einer csproj-Datei?

194

In einer C # -Lösung habe ich ein vorhandenes Projekt hinzugefügt.
Danach hat Visual Studio den folgenden Eintrag in andere .csproj-Dateien eingefügt:

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

Wofür ist das?
Kann ich es löschen?

Joe
quelle
1
Die Lösung wurde nach dem Löschen erfolgreich kompiliert - aber die Frage ist: Was passiert zur Laufzeit? Ich muss wissen, was es tut.
Joe

Antworten:

260

Ich hatte einen ähnlichen Fall, in dem dies hinzugefügt wurde:

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

Diese Aufnahme wird von VS2013 absichtlich generiert, wenn Sie ein NUnit-Testprojekt erstellen. Vergessen Sie jedoch, es als Testprojekt zu kennzeichnen, wie in dieser Antwort von Microsoft beschrieben:

Dieses Verhalten ist beabsichtigt.

Um Testframeworks von Drittanbietern wie NUnit und XUnit zu unterstützen, hat Visual Studio 2012 Test Explorer beim Öffnen der Lösung geladen, unabhängig davon, ob es Testprojekte enthielt. Dies führte zu einer Verzögerung von Sekunden für das Starten und Öffnen offener Szenarien für alle Benutzer, von denen die meisten keine Tests verwenden.

In Visual Studio 2013 haben wir es so geändert, dass das Test Explorer-Paket nur geladen wird, wenn die Lösung ein oder mehrere Testprojekte enthält. Testprojekte werden auf zwei verschiedene Arten identifiziert. Projekte, die aus einer der integrierten Unit-Test-Projektvorlagen erstellt wurden, werden mithilfe von Projekttyp-GUIDs identifiziert. Andere Arten von Projekten, z. B. Klassenbibliotheksprojekte mit XUnit- oder NUnit-Tests, werden vom Test-Explorer bei der ersten Testerkennung identifiziert und mit dem <Service/>Element „markiert“ .

avandeursen
quelle
8
Ist es für VS 15.3+ noch nützlich?
Jaanus Varus
5
@JaanusVarus Ja, dies tritt immer noch in VS 15.4 auf (ich habe versucht, das Verhalten zu verstehen, und das hat mich hierher geführt). Ich bin mir nicht sicher, ob die Leistungsentscheidung überprüft werden sollte, wenn dies Ihre Frage war.
Lars Kemmann
2
Tritt
2
@Adrian So markieren Sie es als Testprojekt. VS sagt im Grunde: "Das sieht so aus, als wäre es wahrscheinlich ein Testprojekt, also werde ich das einfach für Sie markieren." Oder fügen Sie den in der Antwort von Vladimirs genannten Projekttyp hinzu.
GalacticCowboy
2
Mit Visual Studio 2017 (Version 15.x) kam und ging dieses Problem. In diesem Thread finden Sie eine Historie. Dieser Thread erwähnt auch, dass dies endgültig in Visual Studio 15.7
Structed
35

Persönlich mag ich diesen Service nicht, der meinen Projektdateien hinzugefügt wird, und ich denke, dass es eher eine Problemumgehung als eine richtige Lösung ist. Das Markieren Ihrer Testprojekte als Testprojekte erscheint mir daher korrekter. Dies kann erreicht werden, indem Sie dies zum ersten hinzufügen PropertyGroup:

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

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}bedeutet Testprojekt und {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}- C #. Weitere Projekttypen finden Sie hier

Vladimirs
quelle
11
^ Ich bevorzuge es ProjectTypeGuidsauch, aber wenn Sie plattformübergreifend entwickeln und MonoDevelop verwenden, können Sie keine {3AC096D0-A1C2-E12C-1390-A8335801FDAB}Projekte öffnen : "Dieser Projekttyp wird von MonoDevelop nicht unterstützt". Beide IDEs scheinen glücklich zu sein, wenn Sie einfach die GUID des Testprojekttyps entfernen.
WynandB
3
Ich frage mich, was andere mögliche Typen für den <TestProjectType> sind. Es konnten keine Informationen dazu gefunden werden.
J Pollack
12

Das Gute an bekannten / konstanten GUIDs ist, dass sie ziemlich einzigartig sind und daher in Google sehr einfach zu suchen sind. Was ich getan und gefunden habe: dies und das sowie andere interessante Hits.
Es sieht so aus, als wäre dies tatsächlich ein bekannter Fehler im T4 DSL-Tool, das mit dem SDK geliefert wird. Und zum Glück ist es einfach genug, durch Ändern einiger Registrierungsschlüssel eine Lösung zu finden.

Polyfun
quelle
8
Und jetzt, wenn ich es suche, bekomme ich diese SO-Frage ;-).
Binki
Um ganz klar zu sein, war dieser T4-DSL-Fehler, dass das Service-Tag B4F97281-0DBD-4835-9ED8-7DFB966E87FF allen Projekten hinzugefügt wurde, auch wenn sie nicht T4 verwendeten. Dieser Fehler wurde in Visual Studio 2008 behoben. Projekten, die T4 verwenden, wird weiterhin ein Service-Tag hinzugefügt (obwohl die GUID unterschiedlich ist). Dies ist in VS2017 immer noch der Fall.
Duncan