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. Implement interfaces for you objects so we don't have use SystemWrapper.codeplex.com

    In order to Unit Test and mock things like Registry and File System, we have to create an interface and then wrap your code because your .NET code in the System Namespace doesn't already have an interface.

    See http://systemwrapper.codeplex.com

    If you added the interfaces from systemwrapper.codeplex.com to .NET and then made your objects implement the interfaces, then we could mock things like Registry, File IO, DirectoryEntry, etc., without having to write our own interface and a wrapper.

    191 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. 'params' keyword for every list

    If you're a C# developer, I bet you've used something like this before:

    ***** SomeType DoSomething(params AnotherType[] array){...}

    It is a lot easier to use the 'params' modifier than to create a new array with all the paremeters of the same type you want to insert in a method, specially when it comes to small test projects.

    However, using this comes with a disadvantage: you MUST use the array type. No IList, List<T>, Dictionary<TKey, TValue>, etc.. I believe there is no such reason not to allow these list-like types to use the params keyword. Example:

    ***** SomeType DoSomething(params ListType list){...}

    190 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    20 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  3. Add an 'Ignore space...' for all format options

    Autoformat can be great, but it can also greatly work against when you have some exceptions.

    Please add option to turn off all whitespace autoformatting.

    I never hit accidentally the space button, and I'm also perfectly well to press the space button when I do want a space.

    187 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. Bring back DirectX to C#!!!!

    DirectX should be brought back to C#/VB.Net - it was such a good and powerful tool and since it has been scrapped I found it very difficult to develop any form of sound system software! DirectX or at least a better alternative!

    185 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    10 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  5. Support more than one .NET language within a project

    I would like to use C# or VB.NET along side F# within the same project without being forced to place that code in it's own project. The language of each code file would be determined by it's file extension as it is now. They all compile to IL, so it shouldn't be a problem to link them all together into one DLL.

    For backwards compatibility with existing .csproj, .vbproj and .fsproj files, there would probably need to be a new project format -- something like .netproj that would support multiple language code files.

    182 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 →
  6. Caller Info attribute [CallerMemberNamespace]

    Just have seen the "Future Directions for C#" video.

    The Caller Info attributes

    [CallerFilePaht]
    [CallerLineNumer]
    [CallerMemberName]

    are very helpful, but missing the

    [CallerMemberNamespace]

    attribute.

    169 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    10 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  7. Support for immutable objects

    Use some ideas of F# for C#. For instance, it would be very nice to have support for immutable objects, like immutable lists etc. with low costs for list changes. Also, a keyword to declare a class explicit as immutable would be helpful.

    165 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 →
  8. Add support for Java style "throws" keyword

    In Java, "throws" keyword is used in method signatures, informing about the exceptions may arise from this method.

    public void ReadFile() throws IOException, FileNotFoundException { ... }

    When developer use this method, Java compiler forces the developer to implement an exception handling strategy, surrounding this method with try-catch, or adding these exceptions to the new method's signature..

    public void UseReadFile()
    {
    try {
    ReadFile();
    }
    catch(IOException ioex)
    { ... }
    catch(FileNotFoundException fnfex)
    { ... }
    }

    public void UseReadFile throws IOException, FileNotFoundException
    {
    ReadFile();
    }

    161 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    45 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  9. Visual Studio 2017, C#, Mono Cross Platform Linux?

    This suggestion is migrated to Developer Community. Please use below link to view the current status.
    https://developercommunity.visualstudio.com/content/idea/351519/visual-studio-2017-c-mono-cross-platform-linux.html
    So what is the method to use Visual Studio 2017 (or 2015) to develop & build a cross platform desktop GUI application with Linux? The advertising all indicates Xamarin is the way to go...You go to Mono website and the current pages indicate to no longer use monodevelop on Windows, and point to downloading / install Xamarin to VS. I know Xamarin is now Microsoft and built on Mono, so that sounds reasonable. OK, install Xamarin to VS2017 - except nothing there indicates…

    161 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 →
  10. C# Script window similar to LinqPad

    I want to be able to write scripts to try out things that I would normally create a console application for. It should be really easy to reference projects from the solution that I have currently open and all editor features should be enabled, such as refactoring and intelisense.

    Ideally after I have written code in a script I would then be able to easily move it into one of my projects.

    157 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 →
  11. Allow to have custom delimiters in raw string literal

    C++11 (and some others languages) allow you to define custom delimiters for litterals string. It allows you to copy and paste xml, html , ... easily in you code without have to double " .
    For inst(taken from wikipedia on c++11)

    R"(The String Data \ Stuff " )"
    R"delimiter(The String Data \ Stuff " )delimiter"

    156 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. New projects treat compiler warnings as errors by default

    All new project templates will set the "treat warnings as errors" flag to true by default.

    152 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 →
  13. Add Type Provider to C#

    F# 3.0 introduced a new feature call "Type Provider" that speed up development when accessing internet web services such as Azure Market, OData and many other. the "Type Provider" integrate the web service data into a type-safe .Net classes including IntelliSense.
    support!

    a good document about it can be found at http://research.microsoft.com/apps/pubs/?id=173076

    Please add this feature into C# compiler

    151 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 →
  14. Allow multiple inheritance from classes

    If you inherit from a class in the framework or another third party library it would be great, if I could add stateful methods and properties - not extension methods. The easiest way would be multi inheritance. C++ can do so, so C# should allow this too. To add a simple Method for logging you have to write code over and over again.

    138 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    23 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  15. Provide simple syntax to create a weak-referenced eventhandler

    The by far most common memory leak people introduce in .NET apps are caused by event handlers added to longer-lived objects. For instance an event on a static instance, or on an instance who's lifetime is the entire app lifetime (like app view model or app settings).
    Listening for events on this from a shorter-lived object, makes this short-lived object hang around in memory until the app stops running. A common scenario is the INotifyCollectionChanged event listened to by a XAML control, with data coming from a collection provided by some app state. This will cause a very memory-consuming object…

    135 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. Allow overriding built-in Code Analysis dictionary terms

    We need the ability to override Code Analysis dictionary terms which are shipped out-of-the-box (C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\CustomDictionary.xml)

    Otherwise, there is no way to get rid of CA1704 (IdentifiersShouldBeSpelledCorrectly) warnings for terms that are marked as unrecognized (e.g. "Multi") or compound (e.g. "Toolbar") in the built-in dictionary.

    There is some discussion on Connect[1], but I refuse to accept the recommendation that we need to actually modify our Visual Studio installation files in order to be able to use certain words without CA complaining. This is not a practical solution for large teams.

    I see two…

    133 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 →
  17. Support for Macros in Debugging Command Line Arguments and Executable path for C# solutions

    I am working on an Excel addin written in C#.

    One thing that is very painful is that there is no support for Macros in the command line arguments and executable path in C# debugging panel.

    i.e. when you are working on an Excel addin, typically you need to launch Excel.exe with your addin on the command line arguments.

    What I would really need is to be able to enter

    1 - $(EXCELPATH) in the Start External Program textbox and I would set ExcelPath somehow externally.

    2 - $(TargetDir)/Myaddin.xll as command line arguments

    Unfortunately for C# solution, these macros/envvars are…

    132 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 →
  18. Improve Asynchronous Programming Model

    The asynchronous programming model introduced in .NET with the async/await keywords was a step in the right direction and a great improvement over previous design, but there are a few fundamental and disruptive qualities to it that need addressing:

    1) Zombie-code. This is the biggest issue with .NET asynchronous programming model currently. Once asynchronous code finds its way into your code base, all code referencing it (and being called from it) must also start to incorporate asynchronous keywords and functionality. This results in a phenomenon which has been described as "Async Zombie Infection." It would obviously be great/ideal not to…

    131 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    27 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  19. Create a StackSaver class to facilitate State Management

    Today the C# compiler is capable of creating a State Machine for us when a method returns IEnumerator or IEnumerable.
    But, the state machine itself can be useful for void methods, but that's not all. Methods written that way must have a specific return type. I think it can be better if a class is created that "saves the stack values" and returns to the caller when the "YieldReturn" method is called (it can have a void version and a generic version for the return type).

    Its usage could be like:
    var stackSaver = new StackSaver(someDelegate);
    At any point I…

    121 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    9 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  20. make dedicated C# syntax for IEnumerable<T> type definitions

    Just like Nullable<int> can be written as int? I would like to be able to write int* in stead of IEnumerable<int>. This would of course also work for reference types like a custom defined Person class. IEnumerable<Person> would then be equivalent to Person*.

    IEnumerable<T> has become a very important type within the .NET framework and in my opinion it would make sense to include some minor syntax in the C# language to avoid to have to write the types rather long name for example when defining method parameters and return values that are enumerable. The 'var' keyword isn't allowed everywhere…

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

Feedback and Knowledge Base