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. Allow us to cancel Code Analysis

    Occasionally I hit the "Run Code Analysis on Solution" option by accident. This hijacks Visual Studio for several minutes. During that time, I cannot build anything and I cannot even quit Visual Studio. I just have to stare at the screen for about 5 minutes until it finishes.

    Please give us the option to cancel this process.

    32 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    8 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  2. Add support for async/await with IObservable<T>

    The async/await keywords are fantastic for simplifying code when dealing with asynchronous workflow. The only issue I have with them is that they only respect scalar results. The BCL already contains an interface for the purposes of representing sequences of values which are "pushed" and potentially asynchronous, System.IObservable<T>, and I think it would be very beneficial to add async syntax to better support generating them as well as consuming them:

    Async iterator:

    public static async IObservable<string> GetNames()
    {
    using (DbCommand command = GetCommandFromSomewhere())
    using (DbDataReader reader = await command.ExecuteReaderAsync())
    {
    while (await reader.ReadAsync())
    {
    string value = await reader.GetFieldValueAsync(0);
    yield…

    31 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  3. Access the automatic property hide field

    Adding a specific keyword allows automatic property access to automatically generated fields.
    example:
    using Autofac;
    public static class EasyResolutionExtensions
    {
    public static TService ResolveSet<TService>(this IComponentContext context, ref TService service) where TService : class
    {
    return service ?? (service = context.Resolve<TService>());
    }
    }
    public class MyClass
    {
    private readonly ILifetimeScope _scope;
    private MyClassOne One => _scope.ResolveSet(ref field);
    private MyClassOne Two => _scope.ResolveSet(ref field);
    public MyClass(ILifetimeScope scope)
    {
    _scope = scope;
    }
    }

    public class MyClassOne
    {
    }
    public class MyClassTwo
    {
    }

    31 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  4. Allow Code Analysis for Single File

    Currently the code analysis runs for a whole project which takes (beside HelloWorld) a long time.

    It should be possible to run the analysis for the current file only.

    29 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  5. Allow Integral, Derivative, and Algebraic Calculations

    It is very frustrating to be unable to directly calculate integrals and derivatives of functions within strings (as well as perform other algebraic operations). A large market share exists for data scientists, database experts, and Microsoft Azure users who just want to crunch numbers (which are somewhat like data scientists).

    29 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  6. Error: " testing web applications in 64 bit internet explorer is only supported on internet explorer versions 10 or later".

    Hello,

    I have tried to record a coded UI test on IE11 64 bit using Coded UI Test Builder on a Windows 7 -64bit machine with VS 2013 Premium. I can record the method without any trouble but playback fails and gives me an exception and failed. " testing web applications in 64 bit internet explorer is only supported on internet explorer versions 10 or later". Can you please let me know how to deal with the problem.

    28 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  7. Support mutation testing for c#

    I run a team that makes extensive use of Pit testing for Java. (http://pitest.org/) This leads to dramatically simpler, decoupled and better tested code. With all the advances of the roslyn compiler, this would be an amazing addition to the c# development experience, plus with the advantages that Roslyn could suggest automatic fixes for many issues discovered

    26 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  8. Intellisense for c# conditional compilation symbols

    When writing an #if in c# its hard to know what compilation symbols are defined. it would be great if intellisense could list the available ones.

    26 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  9. Add a one-sided ternary operator to C#

    Two options to this:

    First option is removing the "false" evaluation of a ternary operator.
    Example: [value] = { condition } ? [updated value if true]

    Second option is adding a "?=" operator which could provide a readable alternative.
    Example: [value] ?= { condition } : [updated value if true]

    25 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  10. Let coded ui tests read runsettings

    Currently it is not possible to use runsettings as part of a coded UI test (CUIT), only normal unit tests are able to read and use these settings. To change the settings of the test (when for instance running it via the command line), it is quite a lot of work. It is possible using datasources, but that still doesn't give you the ability to switch settings from the command line.

    It is also quite strange to see that CUITs are not able to make use of runsettings, while normal unit tests can. From a user point of view, there…

    25 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  11. Option to set the Task.ConfigureAwait default at project level

    When building async server/cloud code, every await call needs a .ConfigureAwait(false) call. If there was a default option at project level, the code gets a lot cleaner.

    25 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  12. C# error resistant multithreading – (via visibility and unprotected access protection)

    C# error resistant multithreading – (via visibility and unprotected access protection)
    Making multithreading less error prone: Reducing/Eliminating and detecting unprotected variable access (avoiding many common race conditions)

    Proposal for new C# functionality.

    Multithreaded code is easy to get wrong. A couple of the main concerns are:
    1. Race conditions due to unprotected variable access are easy to introduce/detect
    2. Deadlocks due to lock ordering
    3. Livelocks, lock contention, etc.

    This proposal addresses areas related to problem #1. It does this by helping to make multithreading decisions about which synchronization objects are protecting which code elements more visible. Currently when using…

    24 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  13. Windows Forms Designer Errors

    This suggestion is migrated to Developer Community. Please use below link to view the current status.
    https://developercommunity.visualstudio.com/content/idea/351695/windows-forms-designer-errors.html
    The windows forms designer in Visual Studio still has a lot of critical bugs that need to be fixed.

    One in particular that I encounter on an hourly basis is:
    GenericArguments[0], 'ServiceDefinition...IMyObject', on 'Client...BaseForm`2[TService,TImplementation]' violates the contraint of type parameter 'TService'.

    Here is the call stack:
    at System.RuntimeTypeHandle.Instantiate(RuntimeTypeHandle handle, IntPtr* pInst, Int32 numGenericArgs, ObjectHandleOnStack type)
    at System.RuntimeTypeHandle.Instantiate(Type[] inst)
    at System.RuntimeType.MakeGenericType(Type[] instantiation)

    The error occurs whenever I change something on the base forms and recompile the project. The only way to get the designer…

    24 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  14. Show properties info of a class when mouse over

    Show properties info of a class when mouse over. look at picture attached

    23 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  15. Cause the compiler to emit CS4014 (Because this call is not awaited...) regardless of whether the method is within an async call or not

    During the conversion of a large code set to async, it's very difficult to detect missed Task handling. If a Task is returned in a method that's not async, the developer isn't given any indication that something that used to be synchronous just went async unintentionally. The symptom is often a surprising and extremely confusing bug.

    Methods that return Task (vs Task<>) are particularly vulnerable because they won't have return value to trigger type conversion errors.

    Normally, it makes sense in C# to throw away unwanted return values, however I would argue, in the case of Task, since it's actually…

    23 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  16. Support for variadic generic arguments in C#

    I think it would be nice to have variadic generic arguments on c#

    something like this:

    class Entity
    {
    void Add<T, in TArgs ...>(TArgs args)
    where T : Item
    where T : new(Entity parent, TArgs args)
    {
    items.Add(new T(this, args));
    }
    }

    This is a lot safer than getting T constructors via reflection and receiving params object[] as arguments.

    Maybe this could also be used to declare interfaces

    interface ITest<in TArgs ...>
    {
    void DoSomething(TArgs args);
    }

    delegate TResult Func<in TArgs ..., out TResult>(TArgs);

    public static void SafeTest<T, in TArgs ...>(this T t, TArgs args)
    where T : ISample<in TArgs> …

    22 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  17. Turn off C# debug highlight over text

    Currently the breakpoint in C# covers the line of code making it unreadable. Enhance Visual Studio so that this behavior can be disabled and highlighting the line of code does not obscure the readability of the line.
    Or implement display of breakpoints in C# as it is in C++.

    22 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  18. Structs as compile time constants

    Allow structs to be declared as a compile time constant, and thus be provided as optional parameters

    something like:

    public const Point Origin = Point.Empty; //Example 1

    public const Point Origin2 = new Point(42, 42); //Example 2

    public void Foo(Point origin = Origin)
    {
    ...
    }

    22 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  19. Include a 'yield throw' statement syntax.

    The yield return/break syntax is incredibly useful for swift generation of enumerations, and is a fantastic piece of syntactic sugar, both speeding the programmer and providing a harder-to-break approach for making enumerations.

    We have 'yield return' and 'yield break'. But there is no 'yield throw'. Only two out of three of the block-exiting commands.

    At present, if an exception is thrown inside the body of a generator method, the MoveNext() method of the generated IEnumerator throws this exception, halting any iteration over the enumeration, with MoveNext() now returning false. It also does not advance the internal state machine any further…

    21 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
  20. Add access modifier for test assembly only

    The public, private, protected, internal, etc. modifiers are not a good match for a test project.

    The typical advice is to make a method "internal", and then let the test project see the target project's internal methods. This is not a complete solution, because some methods should not be made internal - they should be encapsulated and hidden away as private or protected. Opening them up just for testing, causes problems.

    The typical advice is a hack. The c# language needs an access modifier which gives a test assembly access to any member.

    Let's call this access modifier "private test"…

    21 votes
    Vote
    Sign in
    (thinking…)
    Password icon
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →

Feedback and Knowledge Base