web-dev-qa-db-ja.com

csprojファイルの「Service Include」とは何ですか?

C#ソリューションでは、既存のプロジェクトを追加しました。
その後、Visual Studioは他の.csprojファイルに次のエントリを追加しました。

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

これは何のためですか?
削除できますか?

189
joe

これが追加された同様のケースがありました:

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

NUnitテストプロジェクトを作成し、Microsoftからのこの answer で説明されているように、テストプロジェクトとしてタグ付けするのを忘れると、VS2013によって意図的にこのインクルードが生成されることがわかります。

この動作は意図的なものです。

NUnitやXUnitなどのサードパーティテストフレームワークをサポートするために、Visual Studio 2012は、テストプロジェクトが含まれているかどうかに関係なく、ソリューションを開くときにテストエクスプローラーをロードしました。これにより、ほとんどのユーザーがテストを使用していないすべてのユーザーの起動およびソリューションのオープンシナリオに数秒の遅延が追加されました。

Visual Studio 2013では、ソリューションに1つ以上のテストプロジェクトが含まれる場合にのみテストエクスプローラーパッケージが読み込まれるように変更しました。テストプロジェクトは2つの異なる方法で識別されます。組み込みの単体テストプロジェクトテンプレートの1つから作成されたプロジェクトは、プロジェクトタイプGUIDを使用して識別されます。 XUnitまたはNUnitテストを含むクラスライブラリプロジェクトなど、他のタイプのプロジェクトは、最初のテスト検出時にテストエクスプローラーによって識別され、<Service/>アイテムで「タグ付け」されます。

255
avandeursen

個人的には、このサービスをプロジェクトファイルに追加するのは好きではなく、適切なソリューションというよりは回避策のようなものだと思います。したがって、テストプロジェクトをテストプロジェクトとしてマークすることは私にとってより正しいように思われ、これは最初の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#を意味します。他のプロジェクトタイプguidsの場合 here

33
Vladimirs

well-known/constantGUIDの良い点は、それらが非常にユニークであり、したがってGoogleで非常に簡単に検索できることです。私はそれをして、見つけました: thisthis 、およびその他の興味深いヒット。
これは実際には、SDKに付属するT4 DSLツールの既知のバグのようです。幸いなことに、いくつかのレジストリキーを変更することで簡単に解決できます。

12
Polyfun