Forum Visual Studio

Help me understand Visual Studio Toolbar

EdHubbellEdHubbell USMember ✭✭

I've been developing in Xamarin on a Mac for a few years, but I still don't get wtf is going on in the upper left corner.

Take this example Forms app with a Droid and iOS project.

Why am I allowed to specify Debug|iPhone for a Droid project? What does that even do? You can see that there is no Debug|iPhone config in the Droid project. So what the hell is the app going to do when I press that arrow button on the left? Why am I even allowed to specify this? Shouldn't these choices gray out when I move from Droid to iOS and back? The way it behaves makes no sense to me.

When I press the arrow button, will it try to deploy to the device? I've got an app with an iOS release build I'm trying to deploy to a device. It never happens. The app builds, and never deploys. I've got it set to Release|iPhone. This takes at least 8 minutes each time. Sometimes the same thing happens in Debug|iPhone mode. Or maybe I accidentally set it to Debug (which shouldn't be a choice because that config DOENS'T EVEN EXIST) instead of Debug|iPhone, and there go 8 minutes of my life waiting for a deploy that won't happen. Except in some apps it deploys when on iOS in Debug.

While we're here - Why does the arrow button sometimes get a stripe thru it?

Why is there no ToolTip on this godforsaken button? What the hell is a blank stripe supposed to signify? What precious information am I, an experienced native English speaking developer, missing to give this design choice any context whatsoever?

I'm now recalling when I was at Evolve 2014 and someone from Xamarin went right to the menus instead of this incomprehensible cluster in the upper left. It's a UI nightmare. Maybe that's the solution - Monitor tape.

I'm so grateful that some of my client work is in Windows .NET development, where I press the arrow and the program, you know.. Runs.


  • mhutchmhutch USMember, Xamarin Team Xamurai
    edited May 2018

    The first dropdown is the solution run configuration. This controls what gets run when you hit "Run". Every executable project implicitly has a default run configuration, so out of the box it works the same way as startup projects in Visual Studio on Windows. However, it's a bit more powerful, you can create named Solution Run Configurations that run multiple projects, or named Project Run Configurations that run projects with custom arguments, Android intents, etc.

    The second dropdown is the solution build configuration. This is exactly the same as the Solution Configuration in Visual Studio on Windows - a named map of which projects you want to build and which project configuration you want to use for each one. It controls what gets built when you hit "Build".

    Solution Build configurations can be a little bit confusing with solutions that contain both iOS and Android projects due to the device/simulator specific configurations in the iOS projects. For example, because iOS projects have a configuration called "Debug|iPhone", by default a solution configuration called "Debug|iPhone" is also created that maps to the iOS project's "Debug|iPhone" project configuration. This solution configuration may or may not be configured to build the Android project - it could, for example, map to the "Debug" configuration of the Android project. All of this applies to Visual Studio on Windows too.

    The third dropdown is the device selector. This selects which device or emulator your project runs on. It only shows devices that are valid for the projects(s) in the active solution run configuration.

    The arrow button with a strip through it indicates that that the button will "build" rather than "run". This happens if the currently selected solution build configuration does not build any executable projects. I agree this is a bad metaphor and tooltips would be helpful - I've filed a couple issues at and

    We've also been looking into ways to simplify the default solution configurations in projects with iOS and Android projects.

  • EdHubbellEdHubbell USMember ✭✭

    The arrow button with a strip through it indicates that that the button will "build" rather than "run".

    Thanks, @mhutch - That is something worth knowing. I think one of the things that was really driving me over the edge was clicking on that arrow thinking that it'd run in debug mode. Waiting on an iOS debug session only to have it produce an iOS build...

    I'm getting into the habit of using the text menus, as they disable/enable somewhat logically.

  • mhutchmhutch USMember, Xamarin Team Xamurai

    Glad it helped! I've passed this feedback onto our docs team as well :)

Sign In or Register to comment.