Change startup project automatically
Categories:
Automating Startup Project Selection in Visual Studio

Learn how to configure Visual Studio to automatically select the correct startup project based on the active solution configuration, streamlining your development workflow.
Working with multi-project solutions in Visual Studio often requires switching the startup project depending on the task at hand. Manually changing the startup project can become tedious and error-prone, especially in large solutions. This article explores a powerful technique to automate this process, ensuring that the correct project is set as the startup project based on the active solution configuration. This method leverages Visual Studio's extensibility features to provide a seamless development experience.
The Challenge of Multi-Project Solutions
In many real-world applications, solutions are composed of multiple projects: a web application, a desktop client, several class libraries, unit test projects, and perhaps a console application for background tasks. Each of these might require a different startup project for debugging or execution. For instance, you might debug the web application for front-end development, or a console app for backend processing. Constantly right-clicking and selecting 'Set as Startup Project' breaks your flow and can lead to accidentally running the wrong project.
flowchart TD A[Start Development Session] --> B{Select Solution Configuration?} B -->|Yes| C[Manually Set Startup Project] C --> D[Run/Debug] B -->|No| E[Default Startup Project] E --> D D --> F{Is it the correct project?} F -->|No| C F -->|Yes| G[Continue Work] style C fill:#f9f,stroke:#333,stroke-width:2px style E fill:#f9f,stroke:#333,stroke-width:2px
Traditional workflow for managing startup projects
Automating with Project Dependencies and Configuration
Visual Studio allows you to define project dependencies and manage build configurations. While these are crucial for build order, they don't directly control the startup project. The key to automation lies in modifying the solution file (.sln
) or using a Visual Studio extension. For a robust and maintainable approach, especially in team environments, modifying the solution file directly is often preferred as it integrates with source control and applies to all developers.
The technique involves adding a GlobalSection(ExtensibilityGlobals)
block to your solution file. Within this block, you can define a custom property that Visual Studio will interpret to set the startup project based on the active solution configuration. This approach is particularly useful when you have distinct configurations like 'Debug Web', 'Debug Desktop', or 'Release API' that each correspond to a specific startup project.
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionStartupProjects = Debug|Any CPU = {YOUR_WEB_PROJECT_GUID}
SolutionStartupProjects = Debug|x64 = {YOUR_WEB_PROJECT_GUID}
SolutionStartupProjects = Release|Any CPU = {YOUR_API_PROJECT_GUID}
SolutionStartupProjects = Release|x64 = {YOUR_API_PROJECT_GUID}
EndGlobalSection
<ProjectGuid>
element. Remember to reload the project after copying the GUID.Implementing the Automatic Startup Project Selection
Here's how to implement this automation in your Visual Studio solution. This process involves directly editing the .sln
file, so ensure you have a backup or are working within a version-controlled environment.
1. Close Visual Studio
Ensure Visual Studio is completely closed before editing the .sln
file to prevent conflicts or data loss.
2. Locate Your Solution File
Navigate to the directory containing your solution and open the .sln
file with a text editor (e.g., Notepad++, VS Code).
3. Identify Project GUIDs
For each project you want to set as a startup project, find its unique GUID. You can do this by temporarily unloading the project in Visual Studio and editing its .csproj
(or equivalent) file, then copying the value from the <ProjectGuid>
tag. Reload the project afterward.
4. Add or Modify GlobalSection
Find the GlobalSection(ExtensibilityGlobals) = postSolution
block. If it doesn't exist, add it. Inside this block, add lines in the format SolutionStartupProjects = [ConfigurationName]|[Platform] = {PROJECT_GUID}
. Replace [ConfigurationName]
, [Platform]
, and {PROJECT_GUID}
with your specific values. For example, SolutionStartupProjects = Debug|Any CPU = {C0FFEE00-DEAD-BEEF-0000-000000000000}
.
5. Save and Reopen Solution
Save the modified .sln
file and reopen your solution in Visual Studio. Now, when you switch between the specified solution configurations, the startup project should automatically update.
.sln
file directly. Incorrect modifications can corrupt your solution. Always back up your solution file before making manual changes.