csproj文件中的“服务包含”是什么?


194

在C#解决方案中,我添加了一个现有项目。
之后,Visual Studio在其他.csproj文件中添加了以下条目:

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

这是用来干嘛的?
我可以删除它吗?


1
解决方案删除后成功编译-但问题是:运行时会发生什么?我必须知道它的作用。
2013年

Answers:


260

我有一个类似的案例,其中添加了:

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

如果您创建一个NUnit测试项目,则此包含项是由VS2013故意生成的,但是忘记将其标记为测试项目,如Microsoft的以下答案所述:

此行为是故意的。

为了支持第三方测试框架(如NUnit和XUnit),Visual Studio 2012会在解决方案打开时加载测试资源管理器,无论它是否包含测试项目。这给所有用户(其中​​大多数不使用测试)的启动和解决方案打开方案增加了几秒钟的延迟。

在Visual Studio 2013中,我们对其进行了更改,以便仅在解决方案包含一个或多个测试项目时才加载Test Explorer程序包。以两种不同的方式来标识测试项目。使用项目类型GUID标识从内置的单元测试项目模板之一创建的项目。其他类型的项目,例如带有XUnit或NUnit测试的类库项目,是在第一次测试发现期间由测试资源管理器标识的,并对其进行“标记” <Service/>


8
对VS 15.3+还是有用吗?
Jaanus Varus

5
@JaanusVarus是的,在VS 15.4中仍然会发生这种情况(我试图理解这种行为,这导致了我的到来)。如果这是您的问题,我不确定是否应该重新考虑性能决定。
拉尔斯·凯曼

2
仍然发生在15.6
dimaaan

2
@Adrian 是将其标记为测试项目的方式。VS基本上是在说:“这看起来可能是一个测试项目,所以我将继续为您做标记。” 或添加弗拉基米尔答案中提到的项目类型。
GalacticCowboy

2
使用Visual Studio 2017(15.x版),此问题就此解决了。请参阅此线程以获取历史记录。该线程还提到此问题最终将在Visual Studio 15.7中修复
结构

35

我个人不喜欢将此服务添加到我的项目文件中,我认为拥有它更像是一种解决方法,而不是适当的解决方案。因此,将您的测试项目标记为测试项目对我来说似乎更正确,这可以通过将其添加到第一个中来实现PropertyGroup

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

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}表示测试项目和{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}-C#。对于其他项目类型的指导,请转到此处


11
^我也喜欢,ProjectTypeGuids但是如果您要进行跨平台开发并使用MonoDevelop,则将无法打开{3AC096D0-A1C2-E12C-1390-A8335801FDAB}项目:“ MonoDevelop不支持此项目类型”。如果您仅删除测试项目类型GUID,则两个IDE似乎都很高兴。
WynandB '16

3
我想知道<TestProjectType>还有哪些其他可能的类型?找不到有关它的任何信息。
J Pollack

12

关于众所周知的/不变的 GUID 的好处是它们非常独特,因此在Google中非常容易搜索。我做了,发现了: thisthis,以及其他有趣的热门歌曲。
看来这实际上是SDK随附的T4 DSL工具中的一个已知错误。幸运的是,通过更改某些注册表项很容易解决。


8
现在,当我搜索它时,我得到了这个问题;-)。
binki

需要明确的是,T4 DSL错误是服务标签B4F97281-0DBD-4835-9ED8-7DFB966E87FF被添加到了所有项目中,即使它们没有使用T4。该错误已在Visual Studio 2008中修复。服务标记仍添加到使用T4的项目中(尽管GUID不同)。在VS2017中仍然如此。
duncanp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.