Ошибка: невозможно зарегистрировать свойство «TestType» как тип значения «System.Guid», поскольку оно уже зарегистрировано как «System.String»

Я обновил Visual Studio с 2019 по 2022 год и начал получать следующую ошибку при запуске модульных тестов (я использую адаптер Google Test (версия 1.17.0.32) и платформу Google Test для проекта C++):

##[error]An exception occurred while invoking executor 'executor://codedwebtestadapter/v1': The type initializer for 'Microsoft.VisualStudio.TestPlatform.Extensions.TmiHelper.Constants' threw an exception.
##[error]Stack trace:
##[error]   at Microsoft.VisualStudio.TestPlatform.Extensions.TmiHelper.TmiBridge..ctor()
##[error]   at Microsoft.VisualStudio.TestPlatform.Extensions.CodedWebTestAdapter.CodedWebTestExecutor.RunTests(IEnumerable`1 sources, IRunContext runContext, IFrameworkHandle frameworkHandle)
##[error]   at Microsoft.VisualStudio.TestPlatform.Common.ExtensionDecorators.SerialTestRunDecorator.RunTests(IEnumerable`1 sources, IRunContext runContext, IFrameworkHandle frameworkHandle) in /_/src/Microsoft.TestPlatform.Common/ExtensionDecorators/SerialTestRunDecorator.cs:line 59
##[error]   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.RunTestsWithSources.InvokeExecutor(LazyExtension`2 executor, Tuple`2 executorUriExtensionTuple, RunContext runContext, IFrameworkHandle frameworkHandle) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/RunTestsWithSources.cs:line 116
##[error]   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.BaseRunTests.<>c__DisplayClass46_0.<RunTestInternalWithExecutors>b__0() in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/BaseRunTests.cs:line 464
##[error]   at Microsoft.VisualStudio.TestPlatform.PlatformAbstractions.PlatformThread.<>c__DisplayClass0_0.<Run>b__0() in /_/src/Microsoft.TestPlatform.PlatformAbstractions/net462/System/PlatformThread.cs:line 29
##[error]--- End of stack trace from previous location where exception was thrown ---
##[error]   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
##[error]   at Microsoft.VisualStudio.TestPlatform.PlatformAbstractions.PlatformThread.Run(Action action, PlatformApartmentState apartmentState, Boolean waitForCompletion) in /_/src/Microsoft.TestPlatform.PlatformAbstractions/net462/System/PlatformThread.cs:line 47
##[error]   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.BaseRunTests.TryToRunInStaThread(Action action, Boolean waitForCompletion) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/BaseRunTests.cs:line 680
##[error]   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.BaseRunTests.RunTestInternalWithExecutors(IEnumerable`1 executorUriExtensionMap, Int64 totalTests) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/BaseRunTests.cs:line 464
##[error]
##[error]Inner exception: Cannot register property 'TestType' as value type 'System.Guid' because it was already registered as 'System.String'.
##[error]
##[error]Stack trace:
##[error]   at Microsoft.VisualStudio.TestPlatform.ObjectModel.TestProperty.Register(String id, String label, String category, String description, Type valueType, ValidateValueCallback validateValueCallback, TestPropertyAttributes attributes, Type owner) in /_/src/Microsoft.TestPlatform.ObjectModel/TestProperty/TestProperty.cs:line 347
##[error]   at Microsoft.VisualStudio.TestPlatform.ObjectModel.TestProperty.Register(String id, String label, Type valueType, TestPropertyAttributes attributes, Type owner) in /_/src/Microsoft.TestPlatform.ObjectModel/TestProperty/TestProperty.cs:line 304
##[error]   at Microsoft.VisualStudio.TestPlatform.Extensions.TmiHelper.Constants..cctor()

Как вы видите выше, основная часть ошибки:

Невозможно зарегистрировать свойство TestType как тип значения System.Guid, поскольку оно уже зарегистрировано как System.String.

Ошибка возникает в следующей задаче Azure Pipeline:

  - task: VSTest@2
    displayName: 'Run tests and coverage'
    inputs:
      testSelector: 'testAssemblies'
      testAssemblyVer2: |
        **\RunUnitTests.exe
      searchFolder: '$(Build.SourcesDirectory)/build/build.$(BuildSystem).$(BuildPlatform).multi'
      pathtoCustomTestAdapters: '$(GoogleTestAdapterPath)' # Test Adapter for Google Test (MSFT fork of Google Test Adapter, shipped with VS2019 and VS2022)
      codeCoverageEnabled: 'true'
      platform: '$(BuildPlatform)'
      configuration: '$(BuildConfiguration)'
      runSettingsFile: '$(Build.SourcesDirectory)\tools\ClientSDKTools\libmrh.runsettings'    
    condition: and(succeeded(), eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildSystem'], 'Windows'))

Я подозреваю, что в тестовых библиотеках есть несоответствие/несогласованность библиотек.

Вещи, которые я пробовал:

  • Я обновил пакет Micrososft.TestPlatform через nuget -> «dotnet add package Microsoft.TestPlatform» для различных проектов в репозитории, но все равно получил ту же ошибку.
  • Я вернулся к задаче VSTest@1 Azure Pipeline (вместо VSTest@2). Все еще получил ту же ошибку.
  • Я искал TestType в исходном коде, но не нашел его. Как я и подозревал, TestType должен был использоваться в некоторых внутренних библиотеках MS, а не в моем коде.

обновите пакеты Microsoft.VisualStudio.TestPlatform до последней версии.

T.S. 04.07.2024 02:08

@Т.С. Я обновил пакет Micrososft.TestPlatform через nuget -> «dotnet add package Microsoft.TestPlatform» для различных проектов в репозитории, но все равно получил ту же ошибку.

Kamran Bigdely 08.07.2024 19:00

@KamranBigdely Это известная проблема в версии VS 2022 17.10. И это было исправлено в предварительной версии 17.12 (сейчас в процессе релиза). Я поделился соответствующим билетом в ответе. А в Azure Devops вы можете откатить версию vs при запуске задачи vstest.

Kevin Lu-MSFT 10.07.2024 09:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Невозможно зарегистрировать свойство TestType как тип значения System.Guid, поскольку оно уже зарегистрировано как System.String.

Это известная проблема в последних версиях Visual Studio 2022. Обратитесь к этому билету: VS2022 17.10.1 выдает ошибку в конвейерах Azure DevOps (самостоятельно размещенных) с помощью VSTest@2

Проблема связана с изменениями, внесенными в тест Google несколько месяцев назад. Вот подробности: Исправьте настройки параметризованного теста

Я проверил внутренний ресурс и подтвердил, что проблема исправлена ​​в Visual Studio 2022 версии 17.12.

В настоящее время Visual Studio 2022 17.12 находится в стадии выпуска. Нам еще нужно немного подождать. Вы можете продолжать следить за билетом выше, чтобы проверить обновление.

Если вы используете Azure DevOps Pipeline, я хотел бы поделиться обходным решением:

Вы можете использовать задачу установщика тестовой платформы Visual Studio, чтобы вернуться к старой версии Visual Studio 2022 17.8. И установите vsTestVersion: 'toolsInstaller' в задаче VStest.

steps:
- task: VisualStudioTestPlatformInstaller@1
  inputs:
    packageFeedSelector: 'nugetOrg'
    versionSelector: 'specificVersion'
    testPlatformVersion: '17.8.0'
- task: VSTest@2
  displayName: 'Run tests and coverage'
  inputs:
    testSelector: 'testAssemblies'
    vsTestVersion: 'toolsInstaller'
    testAssemblyVer2: |
      **\RunUnitTests.exe
    searchFolder: '$(Build.SourcesDirectory)/build/build.$(BuildSystem).$(BuildPlatform).multi'
    pathtoCustomTestAdapters: '$(GoogleTestAdapterPath)' # Test Adapter for Google Test (MSFT fork of Google Test Adapter, shipped with VS2019 and VS2022)
    codeCoverageEnabled: 'true'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    runSettingsFile: '$(Build.SourcesDirectory)\tools\ClientSDKTools\libmrh.runsettings'    
  condition: and(succeeded(), eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildSystem'], 'Windows'))

Приятно осознавать, что это известная ошибка. Обходной путь у меня не сработал. Даже после перехода на версию 17.8.0 я получаю эту ошибку.

Kamran Bigdely 12.07.2024 18:54

Другие вопросы по теме