본문 바로가기
MES 문의 : 010-8015-0400
IT개발/개발 일반

StreamJsonRpc.RemoteInvocationException: 인수에 중복된 분석기 인스턴스가 포함되어 있습니다.

by all it 2024. 12. 7.
반응형

Microsoft Visual Studio Professional 2022 (64-bit) - Current 버전 17.12.3

StreamJsonRpc.RemoteInvocationException: 인수에 중복된 분석기 인스턴스가 포함되어 있습니다. (Parameter 'analyzers')
   위치: StreamJsonRpc.JsonRpc.<InvokeCoreAsync>d__1561.MoveNext()
--- 예외가 throw된 이전 위치의 스택 추적 끝 ---
   위치: System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   위치: System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   위치: Microsoft.CodeAnalysis.Remote.BrokeredServiceConnection1.<TryInvokeAsync>d__181.MoveNext()
RPC server exception:
System.ArgumentException: 인수에 중복된 분석기 인스턴스가 포함되어 있습니다. (Parameter 'analyzers')
      at Microsoft.CodeAnalysis.Diagnostics.CompilationWithAnalyzers.VerifyAnalyzersArgumentForStaticApis(ImmutableArray1 analyzers, Boolean allowDefaultOrEmpty)
      at Microsoft.CodeAnalysis.Diagnostics.CompilationWithAnalyzers..ctor(Compilation compilation, ImmutableArray1 analyzers, CompilationWithAnalyzersOptions analysisOptions)
      at Microsoft.CodeAnalysis.Remote.Diagnostics.DiagnosticComputer.GetDiagnosticsAsync(ImmutableArray1 projectAnalyzerIds, ImmutableArray1 hostAnalyzerIds, Boolean reportSuppressedDiagnostics, Boolean logPerformanceInfo, Boolean getTelemetryInfo, CancellationToken cancellationToken)
      at Microsoft.CodeAnalysis.Remote.Diagnostics.DiagnosticComputer.GetNormalPriorityDiagnosticsAsync(ImmutableArray1 projectAnalyzerIds, ImmutableArray1 hostAnalyzerIds, Boolean reportSuppressedDiagnostics, Boolean logPerformanceInfo, Boolean getTelemetryInfo, CancellationToken cancellationToken)
      at Microsoft.CodeAnalysis.Remote.RemoteDiagnosticAnalyzerService.<>c__DisplayClass3_0.<<CalculateDiagnosticsAsync>b__0>d.MoveNext()
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.Remote.RemoteWorkspace.<>c__DisplayClass7_01.<<RunWithSolutionAsync>g__ProcessSolutionAsync|1>d.MoveNext()
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.Remote.RemoteWorkspace.RunWithSolutionAsync[T](AssetProvider assetProvider, Checksum solutionChecksum, Boolean updatePrimaryBranch, Func2 implementation, CancellationToken cancellationToken)
      at Microsoft.CodeAnalysis.Remote.RemoteWorkspace.RunWithSolutionAsync[T](AssetProvider assetProvider, Checksum solutionChecksum, Boolean updatePrimaryBranch, Func2 implementation, CancellationToken cancellationToken)
      at Microsoft.CodeAnalysis.Remote.BrokeredServiceBase.RunWithSolutionAsync[T](Checksum solutionChecksum, Func2 implementation, CancellationToken cancellationToken)
      at Microsoft.CodeAnalysis.Remote.RemoteDiagnosticAnalyzerService.CalculateDiagnosticsAsync(Checksum solutionChecksum, DiagnosticArguments arguments, CancellationToken cancellationToken)

해당 오류는 Microsoft.CodeAnalysis.Diagnostics와 관련된 문제로, 중복된 분석기 인스턴스가 제공되어 Diagnostics API 호출 시 충돌이 발생했음을 나타낸다. 이 문제는 주로 Visual Studio 또는 Roslyn 기반 프로젝트에서 발생하며, 코드 분석이나 빌드 도중 중복된 분석기가 지정되었을 때 발생한다.

원인

  1. 중복된 분석기: 동일한 분석기가 두 번 이상 프로젝트 또는 솔루션에 로드된 경우 발생한다.
  2. 패키지 의존성 문제: 두 NuGet 패키지가 서로 다른 버전의 분석기를 참조하여 충돌이 발생할 수 있다.
  3. 잘못된 빌드 캐시: Visual Studio의 빌드 캐시나 프로젝트 설정이 잘못된 경우 중복된 분석기가 발생할 수 있다.
  4. 설정 파일 문제: 프로젝트 파일(.csproj)이나 Directory.Build.props/Directory.Build.targets에서 중복된 분석기가 추가되었을 가능성.

해결 방법

1. 중복된 분석기 제거

  • .csproj 파일에서 추가된 분석기 리스트를 확인한다.
  • 중복된 Analyzer가 추가되어 있는 경우 제거한다.

.csproj 예시:

<ItemGroup>
  <!-- 중복된 Analyzer 확인 -->
  <Analyzer Include="path_to_analyzer.dll" />
  <Analyzer Include="path_to_analyzer.dll" /> <!-- 중복된 항목 제거 -->
</ItemGroup>

2. NuGet 패키지 확인 및 정리

  • 프로젝트에서 사용 중인 NuGet 패키지가 동일한 Analyzer를 포함하고 있는지 확인한다.
  • 중복된 패키지가 있다면 하나로 통일하거나, 상위 버전으로 업데이트한다.

NuGet 패키지 관리 명령:

dotnet list package
dotnet remove package <패키지 이름>
dotnet add package <패키지 이름> --version <버전>

3. 빌드 캐시 정리

  • Visual Studio의 빌드 캐시가 문제라면 캐시를 정리하고 다시 빌드한다.
  1. Visual Studio 캐시 정리:
    • 도구 > 옵션 > 텍스트 편집기 > C# > 고급 > 분석기 캐시 정리 옵션을 실행한다.
  2. CLI 명령어로 빌드 캐시 정리:
     
dotnet clean
dotnet build

4. Directory.Build.props 및 Directory.Build.targets 확인

  • 솔루션의 루트 디렉터리에 Directory.Build.props 또는 Directory.Build.targets 파일이 있는 경우, 중복된 분석기가 추가되어 있는지 확인한다.

Directory.Build.props 예시:

<Project>
  <ItemGroup>
    <!-- 중복된 Analyzer 제거 -->
    <Analyzer Include="path_to_analyzer.dll" />
  </ItemGroup>
</Project>

5. Visual Studio 분석기 설정 초기화

  • Visual Studio에서 분석기 설정을 초기화한다.
    • 도구 > 옵션 > 텍스트 편집기 > C# > 고급 > 기본값 복원 클릭.

요약

  • 원인: 중복된 분석기 인스턴스가 추가되어 Diagnostics API 호출 시 충돌.
  • 해결 방법:
    1. .csproj 파일에서 중복된 Analyzer 항목 제거.
    2. NuGet 패키지를 확인하고 충돌 제거.
    3. 빌드 캐시 정리 후 다시 빌드.
    4. Visual Studio를 최신 상태로 업데이트.
    5. Directory.Build.props 또는 Directory.Build.targets에서 중복 확인.

이 방법으로도 문제가 해결되지 않는다면 Microsoft 공식 문서의 권장 사항을 참고하거나, 프로젝트 환경에 맞게 추가 조정을 진행해야 한다.

반응형

댓글