Where has Kevin been?

I’m still here, I’ve just been very busy.  We’re in the thick of planning out what we’d like to do for the next version of Visual Studio.  If you have any suggestions, please drop them in the comments section.  I’m most interested in the sorts of features that would be Visual Studio features (as opposed to language features), and the ones that apply while you are actually editing C# code.

Also, I’ve changed roles a bit.  I’m now the dev lead for the C# IDE team, instead of an individual contributor on the team, so I’m learning what it’s like to be a people manager.

I have a few ideas queued up for future blog posts, but I’m definitely interested in your questions too.  What parts of features in the C# editor are you curious about?  What about work at MS and our processes, is that a topic of any interest?

Comments (38)

  1. Anon says:

    I am very interest to have a notebook with diagramming and drawing as well as text recording features in Vs. So that I can disign, keep code fragments that I need to reuse and generally use it to collect things that I need for my coding. It should also autosave and be sharable amongst users, even at real-time so that multiple coders who work on a project can have a shared notebook right in VS with code fragments, design diagrams and shared ideas that they are working on. Also, I want to be able to compile a C# file without having to create a project and a solution first and all these supporting folders and files that litter up my harddrive just for a small test program. Finally, I want an addins center where I can find useful and free addins since its good to have choice but if you don’t know where to search for those choices and if you are overwelmed with them then you use no addins. VS may have good addins but Google should not be the place that one goes to find them.

  2. Rob Gough says:

    Hi. I’d love to see a "Recently Deleted" list. This is probably due to my coding style, but I find that I’m often deleting bits of code (when changing existing code) and then rewriting parts of it… and I want to see how it did something before I deleted it – or there’s a bit of code that I can’t be bothered to type out again.

    For major pieces of code you can (generally) take a look in source control, but I’m talking about little changes.

    What I propose is a list that can appear alongside the solution explorer/properties window etc. that has previously deleted text that you can select and copy text out of as required. It would behave slightly differently to how photoshop works, and would definately not behave the same as a recycle bin. You wouldn’t want to "restore" the deleted text, just be able to access it and copy bits as required.

    It is different from Ctrl-Z in that if you want to see something you need to remove all of your  changes first, copy what you want, and then Ctrl-Y your changes back before copying in – a process which can get really awkward, and likely dangerous too.



  3. Duncan says:

    Probably falls slightly outside of your remit, but i’d like the debugger to make hoisted values more discoverable. – see part way down on this page http://blogs.msdn.com/wesdyer/archive/2007/02/23/linq-to-ascii-art.aspx

  4. Corey Haines says:

    I don’t really have any suggestions, but I wanted to say that it was good to see you back. Congrats on becoming the team lead!

  5. Thanks Corey.  It’s good to hear from you again too!

  6. GregUzelac says:

    How about a way to temporarily hide extension methods shown by Intelisense? You might do something like how Ctrl makes the list transparent. This would be nice if you are searching for a native method/prop of a list, an don’t want to wade through the many extension methods. Or how about a way to sort the list shown by Intelisense (by return type, Paramter type, name, and of course the icon type.

  7. Welcome to the forty-first Community Convergence. The big news this week is that we have moved Future

  8. Jon Skeet says:

    I was going to give a few details, but I think it’s probably best just to post the page:


    ReSharper has a lot of these covered, but it would be nice to see them in the "base" IDE. In particular, Open Type/Resource and Intellisense overload handling would be of significant benefit without being *hugely* hard to implement (i suspect).


  9. I’d be extremely interesting in an improvement of the Immediate window and Edit&Continue so that more dynamic-style programming could be achieved.  When algorithms are slightly too complex to keep in mind perfectly error-free, it’s very useful to be able to run through code and "fix" or complete it as you go.

    A few specific limitations:

    – it’s not currently possible to use Lambda expressions and thus LINQ in the debugger/immediate window.  That’s unfortunate, because precisely in the debugger you’re often faced with large object trees and complex structures where a query might help.

    – it’s not possible to edit and continue in any method containing a lambda expression.  That’s unfortunate.

    – You can’t add methods&memebers to classes while their running.  That makes a more dynamic-like programming style impossible.

    A large part of dynamic languages appeal over C# are these features, and having them would be brilliant (though I can imagine they aren’t easy to implement!).

  10. Hi,

    i´m also a CodeGear Delphi user ( old Borland ), and in its IDE there is something really nice.  On tool palette i can type a control name, like "button" and tool palette filters its list show only controls containing "button" expression. This would be very nice on VS.

  11. Luk says:

    I would love to have numbered breakpoints. I’d even like to take a stab at implementing them myself through the VS SDK.

    Numbered breakpoints (or breakpoint paths): a breakpoint that is hit only when a (number of) breakpoint(s) have been hit first.


  12. Karl Meissner says:

    1) C# already implement structured comments such a param seealso etc..but it completely lacks the ability to reference images.  I want a <img href="myclassdiagram.gif" /> comment tag.  There is a lot of opportunity to add diagrams, charts, screenshots and visualization to source code.  An img tag embedded in the source  code would make that a log easier.

    Think of all the things tools groups could do with that….

    2) Implement a mode where C# xml comments blocks are "pretty printed".  So we hide all the xml formating but still display the code and comments.

    Now render the <img> in as part of my code.   I want a mode where I can see the diagrams as I browse code.

  13. Pablo says:

    My number one request:

    Allow two programmers to edit the same code at the same time via a network connection.

    Aka add a "collaborative" or "networked" editor feature without the need for a separate server.

    See http://www.codingmonkeys.de/subethaedit/ for a terrific example of this.

    This would support paired up programming without having to actually sit next to each other and provide a great way to teach coding.

  14. Eclipse Feature Requests says:

    Visual Studio is missing some features that I use frequently inside Eclipse. It would be so wonderful if VS supported even a few of these.

    – Ctrl+Click code elements (methods, types, etc) to navigate to their definition.

    – Ctrl+O for a popup window of the class members.

    – Tab maximization from double clicking the tab.

    – Ctrl+Shift+R for a search by Type (i.e., class).


  15. BrandonFurtwangler says:

    1) rich(er) comment xml

      – Why is it the year 2008 and I still have tons of ASCII art pictures in my comments?

      – I want to put XAML or HTML in comments and have it rendered instead of the markup within the editor.  

      – Image paths should be relative to the file’s path.

    2) ability to drag a "Reference dll" from the refereces of one project to another project in the same solution.

  16. Tim says:

    The IDE should draw a very thin gray line between pairs of brackets.  

    The problem with C# syntax is that the top bracket can be many screens lower than the bottom bracket.  And when there are many blocks nested together, the problem is worse.  I often find myself mentally pairing brackets when I read code I’m not familiar with, or selecting a bracket to see which bracket it is paired with.  The lack of brackets is one primary reason that Visual Basic, Python, and other non-bracket languages are  easier to read.  

    Alleviate the problem by tracing a very light gray line between top and bottom brackets.  The GUI should give programmers the option to turn this line off, of course.

    Thanks for asking!  

  17. Martyn says:

    A few suggestions:

    I would like to see a search box in the Properties Window like in Expression Blend.

    Ability to collapse large if/for/while sections much like we can methods/regions and classes at the moment.


  18. macsgold says:

    1) Fast keyboard macros.  Add a real macro engine – perhaps based on a hosted PowerShell runspace with variables exposing IDE elements – like the current source file as a string list that can be modified.

    2) Options to re-arrange the contents of a source file into regions according to some style/template (and implement this as a PowerShell script running on the PowerShell macro engine)!

    3) Implement the IDE as WPF for vector graphics, etc – allow code blocks to scale larger or smaller – perhaps based on some more advance #region statement.


    -Matthew Hobbs

  19. Greg says:

    Refactoring suggestions:

    1. Refactor ‘Move variables to innermost scope’ – move all local variables to the innermost scope where they are used (a huge plus given the large amount of EX-vb6 programmers declaring all variables at the top of a method)

    1a. Refactor ‘move variables to innermost scope and extract as method’  – Take a block of code, move all local variables used by that block to the innermost scope and then make the block of code a function.  This helps the problem where local variables are made parameters to the new  function even though they are only used in that block of code.

    2. Refactor ‘Combine Files’ – combine two source code files into a single file – This helps refactor code that follows Java stype of having each class, even 5 line ones, in seperate files

    3. Edit, compile and refactoring for TSQL scripts, stored procedures (a big big big need for us).

    4. Refactor – ‘Inline method’ – Replace a function call with the body of the function that is called. This would greatly help the over modularized code base full of 1 line nice to have functions.


    1. Static analysis enhancements

      1a. Detect functions that can be made static

      1b. Detect unreferenced constants, or private constants that are used in only place

      1c. Detect functions that are public that are only used inside of the class they are defined (i.e, so they can be made private)

      1d. Detect duplicate function names amongst source code files

      1e. Detect duplicate source code of X tokens long.  Either an exact match or a generic match would work.  Generic match treats all identifiers as being the same and all numbers as being the same (this catches duplicate code that just has local variables renamed).

      1f. Detect local variables that should explicitly be cleaned up when ending a function (e.g., SQL connection is a local variable and is never disposed in the function).  It would greatly help if the .NET framework had a feature for a class that forced DISPOSE to be called when a variable goes out of scope and has no more object references pointing to it (i.e, a local variable not returned by a function)

    2. Detect and flag with warnings use of advanced language features.  Reflection use is a big problem for us given that it’s being used for many things it should not be used for and oftentimes, used by inexperienced developers who introduce subtle long lived and expensive to find and fix bugs.

    Long list but mainly the result of working on 250,000 ASP.NET 1.0 lines in VB.NET written by VB6 developers (much duplication, many overly long (500+ line) methods…)

  20. Greg says:

    Use VS 2008’s call tree to allow higher level refactoring like selecting a call subtree and making all functions in it into a single source code file.  Or allowing the user to select nodes in the call tree and making them into a single source code file.

    We’re in need of many of the basic tools for refactoring large applications.

    I really like the emphasis on the IDE and compiler helping identify problem code and want  to see much more in that area.

  21. Danilo. says:

    Make possible that when I type the damn ‘{‘, the ‘}’ appears automatically at the right place, indented and all…

    Eclipse does that. I think it’s something so simple to implement that I wonder why Visual Studio doesn’t offer an option.

  22. macsgold says:

    Also, a way of seeing all state (member variables) together in one place – or at least a way of moving them all up together like an auto-regioning.  Or… some higher-level view of state variables and methods by scope.

  23. Dennis says:

    Hey Kevin. Maybe you should provide a way to remove recent projects from the start page without needing to change the destination of the folder or change the name of the file.

  24. Karl Meissner says:

    Speaking of Powershell how about support for that language in Visual Studio.  I don’t really want to learn two editors but I really like Powershell.

    A Powershell debugger (step through the code and have a watch window) would be really awesome too.

  25. Justin says:

    I use one class per file and name the class the same as the file name. I’d like this to be completely automated for me so I dont have to spend so much time creating and managing files. This is pure busywork most of the time.

    When I choose to rename a file in Solution Explorer do not automatically select the file extension. This would make renaming easier since you don’t have to worry about changing the file extension.

    Some, if limited, support for Vista dictation. I have a slight RSI problem and it is helpful to be able to use my voice wherever possible.

  26. Ken Halter says:

    An IDE mode that would allow a developer to see and work with a single procedure at a time would be a wonderful addition… what would it take… five minutes for MS to implement? I’ve been asking for this "feature" since dotNet 1.0 beta zero and, until I can find an IDE that lets me work the way I like to work, I won’t touch it. I refuse to edit code in a treeview node. What other text based app in the world behaves the way the dotNet IDE does? None… there’s a good reason for that.

    Also, a checkbox setting somewhere that forces "non case-sensitivity" (by changing the case for you, as you type, like the VB IDE does) would be an *excellent* feature. It would have zero effect on the code output so there can be no compatibility issues between IDEs. Since it already exists in the VB side, adding a checkbox that brings the functionality to C# would take, what… a day?

    Obviously a VB programmer here (MS-MVP 7 years straight)

  27. Jim Smith says:

    CallHierarchy – Most Smalltalk browsers had/have similar capability. Beyond the OOP maintainability advantage, the ability to change code with full knowledge of the callers and senders of the method greatly reduces rework caused by prior rework.

  28. Greg says:

    One more:

    We have lots of legacy .NET code from 2003 that has common subexpressions duplicated repeatedly throughout.  Can we get a refactor that allows us to replace the common subexpression with 1 call to save its value in a local variable and then use the local variable in the function?

    This will help us un-cut and paste the code.  Why they cut and pasted duplicate code is beyond me but it closely follows their javascript code of repatedly calling document.getelementid(‘control_name’).value in the same function.

  29. Greg says:

    Please add editing and refactoring support for TSQL scripts and stored procedures.

    This would save us many man-days each year.

    A good step so far was to include intellisense in SQL Server 2008’s TSQL editor.

    I spend 1/3rd of my development time writing TSQL stored procedures.

    Powershell would be nice but is much less important than TSQL since we have more than 100,000 lines of TSQL stored procedures spread throughout our different systems.

  30. Ben says:

    How about using a different syntax color for local variables vs. member variables.


    private int m_nMyNumber = 42;

    public int GetMyNumberAndThenSome()


       // nNewNumber is a different color than m_nMyNumber

       int nNewNumber = m_nMyNumber + 1;

       return nNewNumber;


  31. Markus Hjärne says:

    Beeing a Swedish developer, the applications I develop often needs to support Swedish, English, and sometimes other languages as well. But the support for localization could be improved in Visual Studio:

    1. When renaming a control in a localizable form, the control’s resources are only renamed in the default resource file. It would save a lot of work if it was renamed in the resource files for the other languages as well.

    2. There’s no grouping of standalone resource files of different languages, so when renaming a resource in the default language, you must rename the corresponding resources for the other languages manually. Fixing this would also save a lot of work.

    3. Another improvement, not directly related to localization or Visual Studio, would be to make the auto-generated resource classes partial. This would make it easy to add methods that fills out placeholders in strings which makes it more type safe to use resource strings. For example, if you have the string resource name Found0Occurences1 with the string ‘Found {0} occurences of {1}.’, it would be nice to have the method:

    public string FoundOccurences(int number, string searchString)


     return string.Format(Resources.Found0Occurences1, number, searchString);


    Then you could use it like this:

    MessageBox.Show(Properties.Resources.FoundOccurences(4, "Visual Studio"));

    This would also let IntelliSense give you help on the types and roles of the placeholders as they now are method parameters.

  32. John Brahy says:

    I would like to see more code generation. Stored procedures are so easy to generate but it’s always the reason I end up writing a 20 line perl script to generate them.

    Flash’s IDE has a great tool that allows me to inspect all the variables while the debugger is running. I know I can do it with watches, but I’d like to have all the objects/variables listed somewhere so I know what’s available while I’m writing the code as well.

    I love code snippets, you cant’ give me enough of them, please come up with more and more.

    Refactoring is awesome and has made my life so much longer. Control R,E saves me so much time. I would love to see more functionality in the refactoring stuff.

    Linq is pretty awesome, but there isn’t enough support for it in the ide. It would be great to pull a table or other object from server explorer to the current document and it would convert it to a linq expression.

    I would like better multimedia support for writing tools to create audio and video.

    Intellisense is awesome and is the biggest reason I converted to Visual Studio over notepad. I would love to see ways to filter the list of options so it’s only relative to what you need to see and maybe an option to hold down a button to see more like control does with transparency.

    I could go on and on but overall I love the product and keep up the great work!

  33. Karl Meissner says:

    How about instellisense in the debugger watch window.  I want name completion when I step through the code.  

    It would enhance the already powerful expression evaluator.

  34. Just a quick note, though I will respond to the full list more carefully in a new post.  Karl: you should already get IntelliSense in the watch window for VB and C#.  Are you not seeing it?  In C# it won’t pop up when you first start a name, but it should appear after a ‘.’.

  35. Holger Sachs says:

    Please allow to search in the Toobox (like Borland Studio does).

    I just want to type "Button" and all Controls with the string "button" in the classname are in the list, all others are gone….

  36. Gary Hoffer says:

    I think you need a Right Click COP since when you add new features, like Edit/Advanced was, no one adds this to the right click menu.

    Also an undo for the Dialog menu "Embed in toolStrip Container" as It took me a while to find what had been added to the code, so I could get it undone. Like once you have embedded it, the menu should read "Un-Embed…"

  37. Gary Hoffer says:

    I would like to see more work done to enhance the installer portion of the IDE so that the work needed to create an installer for a project could be made easier.