2013-09-04 2 views
138

В решении C# я добавил существующий проект.
После этого Visual Studio добавил следующую запись в других файлах .csproj:Что такое «Service Include» в файле csproj?

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

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

+0

Решение успешно скомпилировано после его удаления - но возникает вопрос: что происходит во время выполнения? Я должен знать, что он делает. – joe

ответ

203

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

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

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

Данное поведение является преднамеренным.

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

В Visual Studio 2013 мы изменили его так, чтобы пакет Test Explorer загружался только тогда, когда решение содержит один или несколько тестовых проектов. Проекты тестирования идентифицируются двумя разными способами. Проекты, созданные из одного из встроенных шаблонов тестовых проектов, идентифицируются с использованием идентификаторов GUID проекта. Другие типы проектов, такие как проект библиотеки классов с тестами XUnit или NUnit, идентифицируются Test Explorer во время первого обнаружения теста и «помечены» с помощью элемента <Service/>.

+3

Разве это все еще полезно для VS 15.3+? –

+4

@JaanusVarus Да, это все еще происходит в VS 15.4 (я пытался понять поведение, и это привело меня сюда). Я не уверен, что решение о производительности должно быть пересмотрено, если это был ваш вопрос. –

10

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

+4

И теперь, когда я его ищу, я получаю этот вопрос :-). – binki

+2

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/19034960) –

23

Лично мне не нравится эта услуга, добавленная в мои файлы проекта, и я думаю, что это больше похоже на обходное решение, а не на правильное решение. Так маркировки тестовые проекты, как тестовых проектов кажется более правильным для меня, и это может быть достигнуто путем добавления этого к первому 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#. Для других типов проекта go go here

+7

^Я предпочитаю 'ProjectTypeGuids', но если вы занимаетесь кросс-платформенной разработкой и используете MonoDevelop, вы не сможете открыть' {3AC096D0-A1C2-E12C-1390-A8335801FDAB} 'проекты:« Этот тип проекта не является поддерживаемый MonoDevelop ". Обе IDE выглядят счастливыми, если вы просто удалите GUID типа проекта проекта. – WynandB

+2

Интересно, каковы другие возможные типы для ? Не удалось найти информацию об этом. –

 Смежные вопросы

  • Нет связанных вопросов^_^