Visual Studio IDE

Announcement: Last fall, we migrated this forum to Visual Studio Developer Community to provide you one convenient and responsive system for all feedback. As the final step in the migration, this forum will be closed off completely on June 1st, 2019. We encourage you to visit Visual Studio Developer Community where you can now suggest new ideas, browse and vote on existing ideas, and engage with Visual Studio teams.

We’d like your suggestions and ideas to help us continuously improve future releases of Visual Studio, so we’ve partnered with UserVoice, a third-party service, to collect your feedback. Please do not send any novel or patentable ideas, copyrighted materials, samples or demos for which you do not want to grant a license to Microsoft.

This site is for feature suggestions; if you need to file a bug, you can visit our Developer Community website to get started.

Note: your use of the portal and your submission is subject to the UserVoice Terms of Service & Privacy Policy and license terms.

We look forward to hearing from you!
- The Visual Studio Team

I suggest you ...

You've used all your votes and won't be able to post a new idea, but you can still search and comment on existing ideas.

There are two ways to get more votes:

  • When an admin closes an idea you've voted on, you'll get your votes back from that idea.
  • You can remove your votes from an open idea you support.
  • To see ideas you have already voted on, select the "My feedback" filter and select "My open ideas".
(thinking…)

Enter your idea and we'll search to see if someone has already suggested it.

If a similar idea already exists, you can support and comment on it.

If it doesn't exist, you can post your idea so others can support it.

Enter your idea and we'll search to see if someone has already suggested it.

  • Hot ideas
  • Top ideas
  • New ideas
  • My feedback
  1. The ability to generate a class diagram from code in Visual Studio for Mac

    This suggestion is migrated to Developer Community. Please use below link to view the current status.
    https://developercommunity.visualstudio.com/content/idea/351612/the-ability-to-generate-a-class-diagram-from-code.html
    Like the feature for the VS2017 windows version where you can generate a class diagram from code, but then for the Mac version as well

    118 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  2. C# falls to #8 most popular language in 2018 Stack Overflow survey

    This suggestion is migrated to Developer Community. Please use below link to view the current status.
    https://developercommunity.visualstudio.com/content/idea/351630/c-falls-to-8-most-popular-language-in-2018-stack-o.html
    C# has fallen from #4 in the 2017 survey to #8 in the 2018 Stack Overflow survey

    118 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    14 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  3. Intellisense in XML Documentation For <exception>, <see> and <seealso>

    I'm often adding <see cref="Type"> or <see cref="Type.Member"/> elements to the /// comments in C# code. When writing them, I have to type (or copy-paste) the full name of the type/member I'm referencing.

    There should be Intellisense similar to when writing actual code available when using the <exception>, <see> and <seealso> tags.

    113 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    8 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  4. Don't create asterisk for new lines within block comments in C#

    In languages like C and C# you can create block comments like this /* ... */. When you press enter within one of these VS thinks it is being helpful by adding an extra space and asterisk like this:

    /*
    *
    *
    */

    This is really anoying! Every time I press return I then have to press backspace twice as well!

    I am aware that this can be turned off unchecking the "Generate XML documentation comments for ///" option, but there are two things wrong with that: First I do want to create XML documentation and second the wording of…

    111 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    12 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  5. Implement replace/original, code generator feature for C#

    This suggestion is migrated to Developer Community. Please use below link to view the current status.
    https://developercommunity.visualstudio.com/content/idea/351504/implement-replaceoriginal-code-generator-feature-f.html
    As championed here, https://github.com/dotnet/csharplang/issues/107, the replace/original feature will allow custom code generators to be added to C# to implement many common boilerplate tasks. Also known as "Aspect Oriented Programming".

    Possible use cases include implementing INotifyPropertyChanged, logging, exception handling, retrying, and many others.

    110 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    3 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  6. String Enum for both C# and VB

    The underlying type for an Enum is integer based; but I was wondering if it were possible to have a Enum that were String based. Not sure if it's even possible make sense; but it would save some time creating wrapper classes for String constants.

    106 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    7 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  7. File Scoped Namespaces

    Background

    .NET style guidelines recommend having at most one namespace per file. The current namespace syntax only allows block scope, resulting in every file typically having all of its contents (save using statements) wrapped in a namespace block. This leads to both vertical space being wasted (the curly braces used to delimit the block) and more importantly, horizontal space being wasted, with all of the important content indented by an extra tab (if style guidelines are being followed). The indentation from the namespace block conveys no useful information- it is just code bloat.

    Proposal

    Allow a single namespace declaration per…

    104 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    3 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  8. Support Object Initializers on ExpandoObjects

    The following really seems like a feature that should work, but it gives a compiler error:

    dynamic expando = new ExpandoObject {
    FirstName = "David",
    LastName = "Lee"
    };

    It makes sense for Object Initializers to work on all types that implement IDynamicMetaObjectProvider. This inline initialization is especially useful when you want to pass the object inline as a parameter.

    For example:

    RegisterOptions(
    first: new ExpandoObject { FirstName = "A", LastName = "B" },
    second: new ExpandoObject { FirstName = "C", LastName = "D" },
    third: new ExpandoObject { FirstName = "E", LastName = "F" }
    };

    Instead of:

    dynamic…

    100 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  9. Add virtual extension methods (default interface implementations, default methods, traits) to C#

    C# has extension methods, which allow one to define a method that is syntactically invoked on an instance, but defined as a static method on another type. However, these methods lack one very important feature of normal methods: they cannot be overridden by specific implementations.

    Java 8 in contrast introduced an alternative concept, called virtual extension methods, which could be beneficial for C# as well. Virtual extension methods are defined as interface methods with default implementations:

    public interface IMyInterface
    {
    string Property { get; } // ordinary interface member

    default string Format()
    {
    return string.Format ("{0} ({1})", GetType().Name, Property);
    } …

    100 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  10. Add a "??=" operator to C#

    Add an operator that assigns the value of the right operand to the left operand when the left operand is null. For example:

    string message = null;
    message ??= "Hello, World!"; // sets 'message' to "Hello, World!" since 'message' was null.
    message ??= "Goodbye, World!"; // leaves 'message' set to "Hello, World!" since 'message was not null.

    The example above uses strings but would apply to any reference/nullable type.

    Currently, the best alternative that we have for this in C# is:
    message = message ?? "Hello, World!";

    Thanks,
    Blake

    95 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  11. Add VB's high-level event system to C#

    VB's high-level event system is one of the main advantages of VB over C#. I would like to have it in C# as well.
    This event syntax is as awesome and useful as the highly praised async/await in VB and C#, where a lot of complicated work is left to the compiler.
    It puts the language on a higher abstraction level making it less error-prone, better readable, better maintainable and faster to write.
    However, it does not work with lambda event handlers.

    The current C# way of making events is not much more than a pattern which has to be…

    95 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  12. Intellisense filter by type

    This suggestion is migrated to Developer Community. Please use below link to view the current status.
    https://developercommunity.visualstudio.com/content/idea/351024/intellisense-filter-by-type.html
    Sometimes, when I'm coding, I need to search in the intellisense's dropdown for certain kinds of elements.

    That is, when I need to add an event handler and I don't recall its name, I have to search through all elements (methods, properties, enums, etc) til I find mine.

    If I could filter the list by "events", it could optimize the search. Same when I'm looking for "methods", "properties" and etc.

    What about adding tabs on top or below the list, so we can…

    86 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →

    Thanks for sharing this suggestion.
    I’m pleased to report that this feature is being built for Visual Studio “15″.

    You can try it in the recently published Visual Studio “15″ Preview 4
    (see https://blogs.msdn.microsoft.com/visualstudio/2016/08/22/visual-studio-15-preview-4/ for download details)

    To enable this feature in Visual Studio “15″ Preview 4, go to Tools > Options > Text Editor > [C# | Visual Basic] > IntelliSense and check the options for highlighting and filtering.

    See Kasey Uhlenthuth’s blog post at https://blogs.msdn.microsoft.com/dotnet/2016/07/13/visual-studio-15-preview-3-for-c-and-visual-basic/ under “Intellisense Improvements” for more details.

    Thanks
    - The Visual Studio Team

  13. Add "using static" inside method body.

    C# 6 has a new future that you can use static members of class or enumeration members without providing the class or enumeration name explicitly.

    using static System.Reflection.BindingFlags;
    ...
    var m = type.GetMethod("A", Instance|Public);

    But the the "using static" is global inside a file. My suggestion is to limit it inside the method body:

    public MethodInfo GetMethod()
    {
    using static System.Reflection.BindingFlags;
    return type.GetMethod("A", Instance|Public);
    }

    This could simplifies a method without having you to use a static class/enum on the while file.

    82 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  14. Extract Interface Refactoring that extract methods to existing Interface

    The Extract Interface Refactoring are always extract methods to a new interface file which sometimes we already have Interface file established. I think it'll be better if the Extract Interface Refactoring could extract new methods into current interface definition.

    79 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  15. Read all git history of a file

    Read all git history even if you move one file to another directory.

    I can use git log --full-history filename to read all the history of the file in the console but I can´t use it with codelens

    72 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  16. Add VB's procedure line separators to the code editors of all other languages.

    In the VB editor there is a horizontal line drawn between all procedures. This makes the code better readable while scrolling, at least to visually oriented people like me.
    This nice feature is missing in the editors of languages other than VB.

    70 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    5 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  17. Empty braces are no longer formatted correctly with the FormatDocument command

    See also here: http://stackoverflow.com/questions/30520764/did-c-sharp-formatting-change-in-visual-studio-2015-and-how-can-i-change-it-bac

    Given an empty method like this:

    void EmptyMethod() { }

    FormatDocument (Ctrl-K, Ctrl-D) used to leave it alone. In VS 2015, FormatDocument now moves the braces to their own line:

    void EmptyMethod()
    { }

    This is annoying because (a) when I use CollapseToDefinitions, I can no longer see (without expanding it) that the method is empty, and (b) there's no apparent way to turn this behavior off.

    Can it be changed back to how it used to be, where FormatDocument would leave these braces alone?

    70 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  18. Do not indent #region with code

    In C# the #region's follow the code in indentation. I think this is wrong, as they are not a part of the code, and should stay aside - just like they do it in Visual Basic.
    I find the C# #region's too obtrusive. Please, change the behaviour, so they are left-aligned in the editor window, both when folded and unfolded.

    65 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    12 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  19. Add QuickAction to refactor var to implicit type

    I regularly type var as a time saver but would prefer the strong type itself to be in code.
    So I type:
    var result = SomeMethod();
    I would like to do a quick action on var to convert it to:
    List<SomeType> result = SomeMethod();

    65 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  20. Allow SuppressMessageAttribute to work types within a namespace

    Right now the SuppressMessageAttribute only suppresses diagnostics against a namespace, but not the types within it.
    So this:
    [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "CC0061", Scope = "namespace", Target = "CodeCracker.Test.Design", Justification = "No need for tests to have async sufix.")]

    Would not work against types inside the "CodeCracker.Test.Design" namespace, but only if the diagnostic was on the namespace itself.
    To be able to do that, we need to add a SuppressMessageAttribute to each type individually, what is error prone, ugly and demands a lot of attention.
    There needs to be a way to allow for the suppression of diagnostics agains all types within…

    65 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    3 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →

Feedback and Knowledge Base