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

时间:2013-09-04 12:51:06

标签: c# visual-studio visual-studio-2013 csproj

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

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

这是为了什么?
我可以删除吗?

3 个答案:

答案 0 :(得分:255)

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

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

如果你创建一个NUnit测试项目,这个包含结果是由VS2013故意生成的,但忘记将其标记为测试项目,如Microsoft的answer中所述:

  

此行为是故意的。

     

为了支持第三方测试框架,如NUnit和XUnit,Visual Studio 2012在解决方案打开时加载了Test Explorer,无论它是否包含测试项目。这为所有用户增加了启动和解决方案打开方案的延迟时间,其中大多数用户不使用测试。

     

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

答案 1 :(得分:33)

我个人不喜欢这个服务添加到我的项目文件中,我认为让它更像是一种解决方法,而不是一个合适的解决方案。所以将测试项目标记为测试项目对我来说似乎更正确,这可以通过将其添加到第一个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#。对于其他项目类型guid,请转到here

答案 2 :(得分:12)

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