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

在c#解决方案中,我添加了一个现有的项目 在此之后,Visual Studio在其他.csproj文件中添加了以下条目
<ItemGroup>
<Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
</ItemGroup>
这是干什么用的?< br > 我可以删掉吗?< / p >
29677 次浏览
众所周知的/不变的 guid的好处是它们非常独特,因此很容易在谷歌中搜索。我照做了,发现: ,以及其他有趣的命中 看起来这实际上是SDK附带的T4 DSL工具中的一个已知错误。幸运的是,通过更改一些注册表项可以很容易地解决这个问题

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

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

如果你创建了一个NUnit测试项目,但是忘记将它标记为测试项目,这个包含结果是由VS2013故意生成的,正如微软的回答所描述的那样:

这种行为是故意的。

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

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

就我个人而言,我不喜欢把这项服务添加到我的项目文件中,我认为它更像是一种变通办法,而不是一个正确的解决方案。因此,在我看来,将您的测试项目标记为测试项目似乎更正确,这可以通过将此添加到第一个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#。对于其他项目类型的向导,请使用在这里