csproj 文件中的“服务包含”有啥用?

Posted

技术标签:

【中文标题】csproj 文件中的“服务包含”有啥用?【英文标题】:What is "Service Include" in a csproj file for?csproj 文件中的“服务包含”有什么用? 【发布时间】:2013-09-07 23:45:52 【问题描述】:

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

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

这是干什么用的? 我可以删除吗?

【问题讨论】:

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

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

【讨论】:

现在当我搜索它时,我得到了这个 SO 问题 ;-)。 需要明确的是,T4 DSL 错误是服务标签 B4F97281-0DBD-4835-9ED8-7DFB966E87FF 被添加到所有项目中,即使他们没有t 使用 T4。该错误已在 Visual Studio 2008 中修复。服务标签仍添加到使用 T4 的项目中(尽管 GUID 不同)。在 VS2017 中仍然如此。【参考方案2】:

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

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

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

这种行为是故意的。

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

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

【讨论】:

对 VS 15.3+ 还有用吗? @JaanusVarus 是的,这仍然发生在 VS 15.4 中(我试图理解这种行为并导致我来到这里)。如果这是您的问题,我不确定是否应该重新考虑性能决定。 在 15.6 中仍然出现 @Adrian 是您将其标记为测试项目的方式。 VS 基本上是在说,“这看起来可能是一个测试项目,所以我将继续为你标记它。”或者添加弗拉基米尔回答中提到的项目类型。 使用 Visual Studio 2017(版本 15.x),这个问题来来去去。有关历史,请参阅this thread。该线程还提到这将最终在 Visual Studio 15.7 中修复【参考方案3】:

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

【讨论】:

^ 我也更喜欢ProjectTypeGuids,但如果你正在做跨平台开发并使用MonoDevelop,你将无法打开3AC096D0-A1C2-E12C-1390-A8335801FDAB 项目:“MonoDevelop 不支持此项目类型”。如果您只是删除测试项目类型 GUID,这两个 IDE 似乎都很满意。 我想知道 的其他可能类型是什么?找不到任何相关信息。

以上是关于csproj 文件中的“服务包含”有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

请介绍下电脑中的环境变量,它有啥用呢?

__path__ 有啥用?

#include <cstdio>有啥用?

#include <cstdio>有啥用?

C语言头文件,conio.h,windows.h,string.h,math.h各有啥用?

qt中的“morph into”有啥用?