csprojファイルの「サービスインクルード」とは何ですか?


194

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

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

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


1
ソリューションは削除後に正常にコンパイルされましたが、問題は実行時に何が起こるかです。私はそれが何をするかを知らなければなりません。
joe

回答:


260

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

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

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

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

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

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


8
それはVS 15.3+でもまだ役に立ちますか?
Jaanus Varus 2017

5
@JaanusVarusはい、これはVS 15.4でも発生します(動作を理解しようとしていたため、ここに誘導されました)。それがあなたの質問だった場合、パフォーマンスの決定を再検討すべきかどうかはわかりません。
Lars Kemmann 2017年

2
それでも15.6
ディマーン

2
@Adrian これは、テストプロジェクトとしてマークする方法です。VSは基本的に「これはおそらくテストプロジェクトのように見えるので、先に進んでそれをマークします。」または、Vladimirsの回答に記載されているプロジェクトタイプを追加します。
GalacticCowboy

2
Visual Studio 2017(バージョン15.x)では、この問題は解消されました。歴史については、このスレッドを参照してください。このスレッドはまた、これは最終的にはVisual Studioの15.7で修正されます言及
Structed

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#を意味します。他のプロジェクトタイプのGUIDについては、こちらをご覧ください


11
^私も好みProjectTypeGuidsますが、クロスプラットフォーム開発を行ってMonoDevelopを使用している場合は、{3AC096D0-A1C2-E12C-1390-A8335801FDAB}「このプロジェクトタイプはMonoDevelopでサポートされていません」というプロジェクトを開くことができません。テストプロジェクトタイプのGUIDを削除するだけで、どちらのIDEも満足しているように見えます。
WynandB 2016年

3
<TestProjectType>に可能な他のタイプは何ですか?それに関する情報が見つかりませんでした。
Jポラック2017年

12

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


8
そして今、それを検索すると、このSOの質問が表示されます;-)。
binki 2017

明確に言うと、T4 DSLのバグは、サービスタグB4F97281-0DBD-4835-9ED8-7DFB966E87FFがT4を使用していなくても、すべてのプロジェクトに追加されていたことです。そのバグはVisual Studio 2008で修正されました。T4を使用するプロジェクトにはサービスタグが追加されます(GUIDは異なります)。これは、VS2017の場合にも当てはまります。
ダンカンプ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.