Search code examples
c#visual-studio.net-coremsbuildvisual-studio-2022

Windows and WSL2 launch profiles (in launchSettings.json) and multitarget console application (.net472 and .net9.0)


I have a .NET 9.0 console app that I build with Visual Studio 2022 on Windows and it has 2 launch profiles (Win and WSL2):

{
  "profiles": {
    "Windows": {
      "commandName": "Project"
    },
    "WSL2": {
      "commandName": "WSL2",
      "distributionName": ""
    }
  }
}

I added .NET Framework 4.7.2 target (<TargetFrameworks>net9.0;net472</TargetFrameworks>) and now "play" button looks as follows: enter image description here

Is there a way to have two launch profiles only for .net90 target (since .net472 can only run on Windows). Are there some .csproj flags of something? Thank you.


Solution

  • The launchSettings.json doesn't support conditionalizing or tagging profiles for specific target frameworks.

    The file is for development use only and is not deployed. Maybe the thinking was, that as a development file, it was okay to have "rough edges". I don't know.

    With a multi-targeting project, all of the possible target frameworks could be in a built state and the project just needs to be able to be launched for any of the frameworks. Therefore, swapping or transforming the launchSettings.json file on a build is not a good option.

    WSL2 is a recognized "special" command name. Maybe the IDE should know that WSL2 can't be used with .NET Framework. It may be worth submitting a feature request for Visual Studio.

    You can rename the profile.

    e.g.

    {
      "profiles": {
        "Windows": {
          "commandName": "Project"
        },
        "WSL (use with net9.0)": {
          "commandName": "WSL2",
          "distributionName": ""
        }
      }
    }
    

    It's not pretty but when someone opens the "play" button drop-down, the name with the hint will be visible.