Skip to content

Instantly share code, notes, and snippets.

@31
Last active December 24, 2022 18:35
Embed
What would you like to do?

Using Visual Studio to debug C#/.NET code in Godot

I highly recommend reading the official page about using Visual Studio with Godot first. It may be more up to date than this doc, and has been past review.

If you have any problems or questions, come visit the C# channel in the Godot Discord to chat.

To debug C#/.NET code in Godot:

Godot 3.x (3.2.3 or later)

Visual Studio 2019: Click here to expand instructions for a workaround to use the VS extension with Godot 3.x. These steps don't work with Godot 4.x, and they don't reliably work with VS 2022.

Godot 3.x in Visual Studio 2019

This is a step by step guide to using this workaround for Godot 3.2.3+ support in Visual Studio: godotengine/godot-csharp-visualstudio#10 (comment)

  1. Install the latest 1.x version of the Godot VS extension from https://github.com/godotengine/godot-csharp-visualstudio/releases.

  2. In the solution explorer, add a new project to your solution.

    image

  3. Search for library .net framework to find the "old-style" project style. Select it and press Next.

    image

  4. Set up the project.

    • Name: StubProj
    • Location: make sure this is your project directory.
    • Framework: the default is fine, we're going to replace this later anyway.

    image

  5. Open the StubProj directory. You can use Open Folder in File Explorer to do this easily.

    image

  6. Close Visual Studio. Press Yes if prompted to save files.

  7. In the StubFolder directory, delete all files and directories except StubProj.csproj. (Delete bin, obj, Properties, Class1.cs.)

  8. Open StubProj.csproj in a text editor. (Not Visual Studio.) Delete the content, then paste this text (a slightly modified version of the original workaround)

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProjectGuid>{B83A5A30-7D9A-4BCC-BB56-2974A2AAE767}</ProjectGuid>
        <OutputType>Library</OutputType>
        <RootNamespace>StubProj</RootNamespace>
        <AssemblyName>StubProj</AssemblyName>
        <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
        <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
        <Deterministic>true</Deterministic>
        <ProjectTypeGuids>{8F3E2DF0-C35C-4265-82FC-BEA011F4A7ED};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <PlatformTarget>AnyCPU</PlatformTarget>
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
      </PropertyGroup>
      <ItemGroup>
        <ProjectReference Include="..\*.csproj">
          <Private>False</Private>
        </ProjectReference>
      </ItemGroup>
      <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    </Project>
  9. Start Visual Studio. Open your Godot project back up.

  10. Set StubProj as your Startup Project.

    image

  11. See the extension's debugging options are there!

    image

Visual Studio 2022: There is no widely known way to make VS 2022 work with the extension that allows C# debugging in Godot 3.x. See godot-csharp-visualstudio#28

If you install Visual Studio 2022 and Visual Studio 2019 on the same machine, the Godot "External Editor" option will pick 2022. To make Godot open 2019 for you, you can replace the GodotSharp\Tools\GodotTools.OpenVisualStudio.exe file in your Godot installation with a new program that prefers 2019 rather than 2022. To do this, modify and recompile GodotTools.OpenVisualStudio. A user on Discord has done this successfully and made their copy available as an attachment. (As always, be careful with programs created by others online!)

Godot 4.x (4.0 beta or later)

In 4.x, Visual Studio 2019/2022 now works without any extension!

Godot 4.x changes to use .NET [Core] Runtime rather than Mono, so you can attach to a running Godot game with the VS debugger, or set up a launch profile with Godot.exe to start the game and start debugging when you run your project in VS. I expect to see instructions in the docs once 4.0 is released. For now, here's an example of how to set that up: https://www.reddit.com/r/GodotCSharp/comments/xgpqfh/oc_rundebug_godot4_c_projects_from_visual_studio/.

Note that as of writing, 4.x beta is not well documented, so you need to be careful to set it up properly. Ensure you have .NET SDK 6.0 installed from https://dot.net/dl, and it is in PATH. (To test it out, run dotnet --info in a fresh terminal/console window and look at the results. If you're on Windows, be careful that you install the x64 SDK, and the x64 SDK is the first one listed in PATH. You may need to rearrange your system's PATH if you have installed both x86 and x64 to make sure x64 comes first. If you don't know how to rearrange PATH, you can also install the x86 6.0 SDK.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment