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?


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.


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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.