O que é "Inclusão de serviço" em um arquivo csproj?

194

Em uma solução C #, adicionei um projeto existente.
Depois disso, o Visual Studio adicionou a seguinte entrada em outros arquivos .csproj:

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

Para que é isso?
Posso excluí-lo?

Joe
fonte
1
A solução foi compilada com sucesso após a exclusão - mas a questão é: o que acontece no tempo de execução? Eu tenho que saber o que faz.
Joe

Respostas:

260

Eu tive um caso semelhante, onde isso foi adicionado:

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

Essa inclusão acaba sendo gerada de propósito pelo VS2013 se você criar um projeto de teste do NUnit, mas esqueça de marcá-lo como projeto de teste, conforme descrito nesta resposta da Microsoft:

Esse comportamento é intencional.

Para oferecer suporte a estruturas de teste de terceiros, como NUnit e XUnit, o Visual Studio 2012 carregou o Test Explorer na solução aberta, independentemente de conter projetos de teste. Isso acrescentou alguns segundos de atraso aos cenários abertos de inicialização e solução para todos os usuários, a maioria dos quais não usa testes.

No Visual Studio 2013, foi alterado para que o pacote Test Explorer seja carregado apenas quando a solução contiver um ou mais projetos de teste. Os projetos de teste são identificados de duas maneiras diferentes. Projetos criados a partir de um dos modelos de projeto de teste de unidade interno são identificados usando GUIDs do tipo de projeto. Outros tipos de projetos, como o projeto Biblioteca de Classes com testes XUnit ou NUnit, são identificados pelo Test Explorer durante a primeira descoberta de teste e "marcados" com o <Service/>item.

avandeursen
fonte
8
Ainda é útil para o VS 15.3+?
Jaanus Varus 13/09
5
@JaanusVarus Sim, isso ainda ocorre no VS 15.4 (eu estava tentando entender o comportamento e isso me levou aqui). Não tenho certeza se a decisão de desempenho deve ser revisada, se essa foi sua pergunta.
Lars Kemmann
2
Ainda ocorre em 15,6
dimaaan
2
@Adrian Este é como você marcá-lo como um projeto de teste. O VS está basicamente dizendo: "Parece que provavelmente é um projeto de teste, então vou seguir em frente e marcar isso para você". Ou adicione o tipo de projeto mencionado na resposta de Vladimirs.
GalacticCowboy
2
Com o Visual Studio 2017 (versão 15.x), esse problema veio e desapareceu. Veja este tópico para uma história. Este tópico também menciona que isso finalmente será corrigido no Visual Studio 15.7
Structed
35

Pessoalmente, não gosto desse serviço adicionado aos meus arquivos de projeto e acho que tê-lo é mais uma solução alternativa do que uma solução adequada. Portanto, marcar seus projetos de teste como projetos de teste me parece mais correto e isso pode ser alcançado adicionando-o ao primeiro PropertyGroup:

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

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}significa Projeto de teste e {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}- C #. Para outros guias de tipo de projeto, clique aqui

Vladimirs
fonte
11
^ Eu ProjectTypeGuidstambém prefiro, mas se você estiver desenvolvendo plataformas cruzadas e usando o MonoDevelop, não poderá abrir {3AC096D0-A1C2-E12C-1390-A8335801FDAB}projetos: "Este tipo de projeto não é suportado pelo MonoDevelop". Ambos os IDEs parecem felizes se você simplesmente remover o tipo de projeto de teste GUID.
WynandB 27/05
3
Gostaria de saber quais são os outros tipos possíveis para o <TestProjectType>? Não foi possível encontrar nenhuma informação sobre isso.
J Pollack
12

O bom dos GUIDs conhecidos / constantes é que eles são únicos e, portanto, muito fáceis de pesquisar no Google. O que eu fiz e encontrei: isso e isso , além de outros hits interessantes.
Parece que este é realmente um bug conhecido na ferramenta DSL T4 que acompanha o SDK. Felizmente, é fácil resolver isso alterando algumas chaves do Registro.

Polyfun
fonte
8
E agora, quando procuro, recebo essa pergunta SO ;-).
binki
Só para esclarecer, o bug do T4 DSL era que a etiqueta de serviço B4F97281-0DBD-4835-9ED8-7DFB966E87FF estava sendo adicionada a todos os projetos, mesmo que eles não usassem o T4. Esse bug foi corrigido no Visual Studio 2008. Uma etiqueta de serviço ainda é adicionada aos projetos que usam T4 (embora o GUID seja diferente). Esse ainda é o caso no VS2017.
duncanp 14/01/19