microsoft / vscode-dotnettools

This is a feedback repository to capture issues logged for the C# Dev Kit and related extensions from Visual Studio Code
Other
192 stars 6 forks source link

[BUG] Debug test via `LaunchProcessWithDebuggerAttached` over `C# DevKit Test Explorer` ends up in `System.NotImplementedException: The method or operation is not implemented.` #1048

Open MikeSchulze opened 1 month ago

MikeSchulze commented 1 month ago

Describe the Issue

I wrote my own test adapter for my GdUnit4 test API. It works so far good, and I'm able to run and debug tests but.

I wanted to switch from AttachDebuggerToProcess to LaunchProcessWithDebuggerAttached but run into a System.NotImplementedException: The method or operation is not implemented.

I used the latest version of C# Dev Kit on .Net8 My project is based on SDK 17.9.0

Maybe I do something wrong, or misunderstand, any help is welcome.

Steps To Reproduce

it's only reproducible on my PR https://github.com/MikeSchulze/gdUnit4Mono/pull/72

What I see on dotnet list package --include-transitive

 [net8.0]:
   Paket oberster Ebene                           Angefordert   Aufgelöst
   > coverlet.collector                           6.0.0         6.0.0
   > Godot.SourceGenerators                       4.2.1         4.2.1
   > GodotSharp                                   4.2.1         4.2.1
   > Microsoft.NET.Test.Sdk                       17.9.0        17.9.0
   > Microsoft.TestPlatform.AdapterUtilities      17.9.0        17.9.0
   > Microsoft.TestPlatform.ObjectModel           17.9.0        17.9.0
   > Newtonsoft.Json                              13.0.3        13.0.3

   Transitives Paket                             Aufgelöst
   > Castle.Core                                 5.1.1
   > CommandLineParser                           2.9.1
   > Microsoft.CodeAnalysis.Analyzers            3.3.4
   > Microsoft.CodeAnalysis.Common               4.9.2
   > Microsoft.CodeAnalysis.CSharp               4.9.2
   > Microsoft.CodeCoverage                      17.9.0
   > Microsoft.TestPlatform.TestHost             17.9.0
   > Moq                                         4.18.4
   > System.Collections.Immutable                8.0.0
   > System.Diagnostics.EventLog                 6.0.0
   > System.Reflection.Metadata                  8.0.0
   > System.Runtime.CompilerServices.Unsafe      6.0.0

But when I run debug from Test Explorer.

            // List the dependencies
            frameworkHandle.SendMessage(TestMessageLevel.Informational, "Dependencies:");
            foreach (var referencedAssembly in Assembly.Load("gdUnit4Api").GetReferencedAssemblies())
                frameworkHandle.SendMessage(TestMessageLevel.Informational, $"referencedAssembly {referencedAssembly.FullName}");

            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
                frameworkHandle.SendMessage(TestMessageLevel.Informational, $"CurrentDomain {assembly.FullName}");

It shows:

Dependencies:
referencedAssembly System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly GodotSharp, Version=4.2.1.0, Culture=neutral, PublicKeyToken=null
referencedAssembly System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly System.Diagnostics.StackTrace, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
referencedAssembly System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly System.Drawing.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly Microsoft.CodeAnalysis, Version=4.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
referencedAssembly Microsoft.CodeAnalysis.CSharp, Version=4.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
referencedAssembly System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly CommandLine, Version=2.9.1.0, Culture=neutral, PublicKeyToken=5a870481e358d379
referencedAssembly System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
referencedAssembly Microsoft.CSharp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
referencedAssembly System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
CurrentDomain testhost, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.TestPlatform.CoreUtilities, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Diagnostics.Tracing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Diagnostics.Debug, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Diagnostics.Process, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.TestPlatform.PlatformAbstractions, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.TestPlatform.CrossPlatEngine, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
CurrentDomain Microsoft.TestPlatform.CommunicationUtilities, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.VisualStudio.TestPlatform.ObjectModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.VisualStudio.TestPlatform.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
CurrentDomain System.Runtime.Serialization.Formatters, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Diagnostics.TraceSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.IO.FileSystem, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime.InteropServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
CurrentDomain Microsoft.Win32.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Threading.ThreadPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Collections.NonGeneric, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Private.Uri, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Threading.Overlapped, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime.Intrinsics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
CurrentDomain System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime.Numerics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.ComponentModel.TypeConverter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime.Serialization.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Data.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Xml.ReaderWriter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Private.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
CurrentDomain System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Reflection.Emit.ILGeneration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Reflection.Emit.Lightweight, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Reflection.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
CurrentDomain System.Runtime.Loader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain gdUnit4.TestAdapter, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null
CurrentDomain System.Reflection.Metadata, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain gdUnit4.TestAdapter, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null
CurrentDomain System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.IO.MemoryMappedFiles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Text.Encoding.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime.Serialization.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Private.DataContractSerialization, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime.Serialization.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Xml.XmlSerializer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Collections.Specialized, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Reflection.Emit, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.GeneratedCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
CurrentDomain System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Runtime.InteropServices.RuntimeInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Resources.ResourceManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Xml.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain System.Private.Xml.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
CurrentDomain gdUnit4Api, Version=4.2.2.0, Culture=neutral, PublicKeyToken=null
System.NotImplementedException: The method or operation is not implemented.
   at Microsoft.VisualStudio.TestWindow.VSCode.Service.TestWindowCallbackService.LaunchDebugTestHostAsync(LaunchTestHostRequest launchRequest, CancellationToken cancellationToken)
   at Microsoft.VisualStudio.TestWindow.Logging.ILoggerExtensions.CallWithCatchAsync[T](IInternalLogger log, Func`1 func, T defaultValue)
The active test run was aborted. Reason: Exception of type 'Microsoft.VisualStudio.TestPlatform.ObjectModel.TestPlatformException' was thrown.
Aborting test run: test run timeout of 300000 milliseconds exceeded.

It looks like the wrog sdk is used.

CurrentDomain testhost, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.TestPlatform.CoreUtilities, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.VisualStudio.TestPlatform.ObjectModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
CurrentDomain Microsoft.VisualStudio.TestPlatform.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

From my Project setup it should use 17.9.0

<Project Sdk="Microsoft.NET.Sdk">

  <Import Project="../PackageVersions.props" />

  <PropertyGroup>
    <Title>gdUnit4TestAdapter</Title>
    <Version>1.1.0</Version>
    <Description>
      GdUnit4 Test Adapter is the test adapter to run GdUnit4 tests in C#.
    </Description>
    <Copyright>© 2024 Mike Schulze</Copyright>
    <Authors>Mike Schulze</Authors>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFrameworks>net7.0;net8.0</TargetFrameworks>
    <LangVersion>11.0</LangVersion>
    <AssemblyName>gdUnit4.TestAdapter</AssemblyName>
    <OutputType>Library</OutputType>
    <OutputPath>./nupkg</OutputPath>
    <Nullable>enable</Nullable>
    <NullableReferenceTypes>true</NullableReferenceTypes>
    <RootNamespace>GdUnit4.TestAdapter</RootNamespace>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <DebugType>portable</DebugType>
    <!-- warning CS8785, prevent Godot ScriptPathAttributeGenerator errors-->
    <IsGodotToolsProject>true</IsGodotToolsProject>
  </PropertyGroup>

  <PropertyGroup>
    <IsPackable>true</IsPackable>
    <PackageProjectUrl>https://github.com/MikeSchulze/gdUnit4Mono</PackageProjectUrl>
    <PackageId>gdUnit4.test.adapter</PackageId>
    <PackageVersion>1.1.0</PackageVersion>
    <PackageLicenseFile>LICENSE</PackageLicenseFile>
    <PackageReadmeFile>README.md</PackageReadmeFile>
    <PackageReleaseNotes>GdUnit4 Test Adapter beta.</PackageReleaseNotes>
    <PackageIcon>icon.png</PackageIcon>
    <PackageTags>Godot;Test;Testing;UnitTest;GdUnit4;Utility;Utilities</PackageTags>
    <RepositoryType>git</RepositoryType>
    <RepositoryUrl>https://github.com/MikeSchulze/gdUnit4Mono</RepositoryUrl>
      <!-- ingnore dependency warnings to pre release version of gdunit.api -->
    <NoWarn>NU5104</NoWarn>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="GodotSharp" Version="$(GodotNetSdkVersion)" />
    <PackageReference Include="Godot.SourceGenerators" Version="$(GodotNetSdkVersion)" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftSdkVersion)" />
    <PackageReference Include="Microsoft.TestPlatform.ObjectModel" Version="$(MicrosoftSdkVersion)" PrivateAssets="None" />
    <PackageReference Include="Microsoft.TestPlatform.AdapterUtilities" Version="$(MicrosoftSdkVersion)" PrivateAssets="None" />
    <PackageReference Include="coverlet.collector" Version="6.0.0" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <ProjectReference Include="..\api\gdUnit4Api.csproj"/>

    <None Include="README.md" Pack="true" PackagePath="/" />
    <None Include="LICENSE" Pack="true" PackagePath="/" />
    <None Include="icon.png" Pack="true" PackagePath="/" />
  </ItemGroup>

</Project>

Expected Behavior

The LaunchProcessWithDebuggerAttached should be implemented.

Environment Information

Windows 11

Visual Studio Code

Version: 1.88.0 (user setup)
Commit: 5c3e652f63e798a5ac2f31ffd0d863669328dc4c
Date: 2024-04-03T13:26:18.741Z
Electron: 28.2.8
ElectronBuildId: 27744544
Chromium: 120.0.6099.291
Node.js: 18.18.2
V8: 12.0.267.19-electron.0
OS: Windows_NT x64 10.0.22631

dotnet --version: 8.0.201

C#: v2.23.15 C# Dev Kit: v1.5.10 (pre-release) .NET Install Tool: v2.0.3

run dotnet test --diag log.txt log.txt log.host.24-04-07_20-11-31_26096_5.txt

MikeSchulze commented 1 month ago

Could be related to https://github.com/microsoft/vscode-dotnettools/issues/910, but the latest version does not fix that issue.

MikeSchulze commented 1 month ago

@peterwald it would be nice to give me a hint here.

peterwald commented 4 weeks ago

@MikeSchulze The LaunchProcessWithDebuggerAttached workflow is not supported for VS Code at the moment.

Marking this as a suggestion to collect more feedback about the need for this.

MikeSchulze commented 4 weeks ago

Thanks for the reply.