Что такое "Service Include" в файле csproj?


в решении C# я добавил существующий проект.
После этого Visual Studio добавила следующую запись в другие .файлы csproj:

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

что это?
Могу ли я удалить его?

3 182

3 ответа:

у меня был похожий случай, когда это было добавлено:

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

это включение оказывается сгенерированным специально VS2013, если вы создаете тестовый проект NUnit, но забываете пометить его как тестовый проект, как описано в этом ответ от Microsoft:

это поведение намеренно.

для поддержки сторонних тестовых платформ, таких как NUnit и XUnit, Visual Studio 2012 загружает Test Explorer в решение open, независимо от того, он содержал тестовые проекты. Это добавило несколько секунд задержки для запуска и решения открытых сценариев для всех пользователей, большинство из которых не используют тесты.

в Visual Studio 2013 мы изменили его так, что пакет Test Explorer загружается только тогда, когда решение содержит один или несколько тестовых проектов. Тестовые проекты определяются двумя различными способами. Проекты, созданные на основе одного из встроенных шаблонов проектов модульных тестов, идентифицируются с помощью идентификаторов 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#. Для других типов проектов GUID go здесь

хорошая вещь о хорошо известно / константа GUID-это то, что они в значительной степени уникальны и поэтому очень просты в поиске в Google. Что я и сделал, и нашел: этой и этой, а также другие интересные хиты.
Похоже, что это на самом деле известная ошибка в инструменте T4 DSL, который поставляется с SDK. И, к счастью, это достаточно легко решить, изменив некоторые ключи реестра.