After working with Visual Studio 2005 since before its release, I have compiled a list of “issues” I have encountered with it, and in some places compare these “features” to that of other similar products I’ve used. Note that some of these may have been fixed/changed in Service Pack 1 (but all are valid in its final release, not beta, version), as I have been compiling this list over a long period of time.
Intellisense requires too much CPU. Prior versions were fast and efficient. Eclipse is likewise very fast too on the same machine. I also frequently see “Please wait while the documentation cache is being generated” in the tooltip for intellisense’s documentation tooltip. Intellisense also comes up immediately while typing, which wouldn’t necessarily be a bad thing if it didn’t always try to force its suggestions upon you. Eclipse tends to only auto-complete if you tell it to (i.e. “Tab” or “Enter” key is pressed). Worse yet, intellisense’s suggestions are outright bogus! It frequently tries to show suggestions for out-of-context terms, which makes it very difficult to use it efficiently. Eclipse always puts in-context items at the top of the list, complete with method signature checking. Furthermore, they over-complicated intellisense by making ctrl-shift-space necessary to bring it up in function parameters, rather than the regular ctrl-shift hotkey.
Intellisense also can not suggest classes from assemblies not referenced with the using keyword in the source file. This makes routine operations very tedious. How do you get eclipse-like-functionality to auto-add the using keyword and suggest the reference you needed? Ctrl-Shift-F10. That’s right, another cryptic key combination where Ctrl-Space would suffice. What’s worse, it won’t auto-complete the references until I type its full name (so in reality, it only auto-completes the namespace, making the “feature” about 90% useless).
The XML Code Documentation will not show up in a tooltip if there are any parse or syntax errors in the XML comment. At least eclipse will show something, even if formatted badly. Additionally, the tooltip appears for a fixed 30-seconds in the code editor until it times out, regardless of how long the documentation comment is. This is almost never enough time to read docs within the code editor. Oh, does it get worse? Yeah, the tool-tip in Intellisense for the same information is limited to 10 seconds.
The Online F1 Help feature is incredibly slow. Worse yet, while it’s loading, it forces its (incompletely drawn) window to the front focus at least three different times, obstructing my ability to even multitask while that monstrosity loads.
Autoformat is too aggressive and intrusive to forcing its code-style ways. Eclipse’s auto-format works much more friendly to the programmer. And Ctrl-I is easier to type than Ctrl-E, wait, f.
Right-click, “Go to Definition” simply does not work on overloaded members. It’s too stupid to take me to the implementation I clicked on (unlike eclipse, which knows precisely where I want to go with a very simple “Ctrl-Click”). Furthermore, the window that “pops-up” is so freaking verbose that it takes forever to decide which member to take me to. Do you really have to add the full filename+namespace+class+params to every single freaking piece of text the compiler generates and shows in the IDE when the difference is a simple overloaded function? I think I can manage without, thank you.
The code editor does not automatically compile source code as I type/save. The basic “parsing” of the source code is next-to-useless too. This makes typo-error detection much more difficult to find, especially if you forget to compile your solution after every single stupid change.
The IDE is very slow when switching from source code files and the GUI Designer. This is in part to the toolbar redrawing itself too often to show/hide the relevant icons for the context. The screen flashing as a result of the toolbar shifting and resizing every other window is also a huge distraction and consumes a lot of CPU power for a very routine operation.
Also, on more than one occasion, and with more people than me, the GUI Design Editor has lost consistency between that of the GUI and source code, rendering the GUI source code unusable. In each instance that this occurred to us, it ended up being easier to delete the source file and recreate the GUI from scratch [note: version control really helped us out here, but oh wait, VS doesn’t have a minimal type of it built in, unlike eclipse and its local history feature].
I imported a project built for the .NET Compact Framework. I couldn’t for the life of me figure out how to convert it to a standard .NET 2.0 project. I ended up deleting the project and manually importing the source files and references.
AnkhSVN really sucks; it is buggy, slow, hard to use, feels like a hack, and doesn’t provide many useful features that TortoiseSVN alone already couldn’t provide.
Want to refactor a namespace used in the project? I couldn’t find an easy way to do it… I ended up using a primitive “Find & Replace in Files” word search “feature”. Also, renaming an Application Settings file doesn’t update any code references. Furthermore, Right-Click->Refactor shows several options, most of which are irrelevant to the current selection (i.e. it is not context sensitive). Is this 1992 still?
Using the Solution Explorer is a pain. Anything you do that causes it to need refreshed causes the treeview to completely refresh; it removes all items from the tree and adds them back during the update. This causes the solution explorer window to go completely white for several seconds. This is bad for productivity because it causes the user to very easily lose track of his/her place as well as difficult to confirm his/her actions.
The Help program for .NET 2.0 has a “Language Filter” feature. I set it to filter only for the C# language. When I opened a new help link, then clicked the “Back” button, the filter didn’t take effect (causing sample code to show up for Visual Basic, C#, C++, J#, and JScript, cluttering up the help file tremendously), yet the filter still says “C#” only as my selection! To add to this, why would the language filter NOT default to C# only when help is invoked on a C# keyword from a C# source file in a C# project within a C# solution???? Honestly, if I’m programming in C#, I “DO NOT WANT NOR CARE ABOUT VISUAL BASIC CODE EXAMPLES“.
Nullable Types? This is such a poorly-implemented hack upon poorly-designed structs that probably should have been classes in the first place.
Whenever I open up one of my forms in the Form Designer that has made use of any resources (i.e. an icon), it always comes up as needing saved even though I haven’t made any modifications to the form (I only opened it)!
Back to productivity loss, consider this scenario: I have a Tab-Pane with several controls. I try binding the default values of some of those controls to an ApplicationSettings object using the Form Designer and the Properties Window. Every time I set a property, the entire form refreshes (several seconds). By the it finishes refreshing, my tab-pane shows ON TOP of the controls in which it contains! I have to close & reopen the form in the designer to make them visible again (several more seconds). Rinse, lather, repeat dozens of times for each control I need to bind.
Consider this scenario, too: I set one of the application properties to save the window position. As soon as the form designer refreshes, I see the screen in Screenshot 1. Okay…. I close the form, rebuild the project, and see even more errors when reopening the form (screenshot 2). Hmm… I check the code and it looks OK. I rebuild the whole solution and it builds OK. I even execute the program and it executes OK. Won’t open the form designer though.
Out of a last attempt of desperation, I close down Visual Studio, reopen it, and reopen the solution. Next, I rebuild the solution again and receive the compile errors in screenshot 3. HUH?? How can it not even find the “System” namespace? Guess what I do next: Open the form again. Guess what happens: The form opens perfectly and all the compile errors go away. I can’t believe this software is even considered professional. Pre-alpha crack-job hobbyist is more accurate. Definitely not worth the $800+ it costs to buy this buggy pile of bloat ware. The free csc.exe compiler and Crimson Editor (or Mono on Linux) would have been much better suited for programming in this POS language.
Here’s another scenario: I was working on a solution with only two projects. The 2nd project references the 1st project. The 1st project wouldn’t compile because its assembly DLL was in use by the 2nd project, and thus couldn’t overwrite the file. Nothing was running (no debuggers, or anything). Process Explorer showed that devenv.exe simply had an exclusive handle on the file. Piece of junk. Meanwhile, I’ve used eclipse with dozens of projects all referencing each other in weird, complicated ways without a hitch nor a slowdown (remember: eclipse is smart enough to only recompile projects that have actually changed, where VS has to build every project before it can run/debug anything).
Crystal Reports caused the IDE to crash while trying to browse data in a data source. As much as I hate Visual Studio, this is the first time I’ve had it actually crash on me. Also, Crystal Reports’ designer/preview window gives extremely vague error messages like “The field is incorrect“. Or, slightly more informative, but completely unacceptable, “crdb_adoplus : To access classes in your project at design-time, please build your project first, and then try again“. Wow. Yes, I’ve built my project. Instead of trying to be smarter than me, why not just tell me what the real problem is so I can have a chance at solving it?
Crystal Reports can’t reference a custom data class contained in a separate project (but of the same solution, and yes, the project in question does reference the data class project). It forced me to try to link directly to the assembly DLL. (this turned out to be the cause of the deadlock in the above scenario — why a lock was held is beyond me). Also, Crystal Reports likes to, at random intervals, show dummy data in lieu of the real report’s data (i.e. Days of the week, random color names, random numbers), without even telling the user why nor how to fix it in the designer.
The Document Outline window mysteriously changes its name to Field Explorer when in Crystal Reports’ design mode. Yeah, now THAT is intuitive.
Speaking of tool windows, when I have the left-hand panels (Toolbox, Server Explorer, and Data Sources) set to Auto-Hide mode, every time I start VS2005 and load a solution, the “Data Sources” panel unhides and blocks any windows beneath it. The only way to get it to Automatically Hide again is to click on another panel to make it visible, then move the mouse away, which hides both panels again.
Speaking of loading visual studio, the Title-bar Focus is always reversed from whether it actually has focus or not. For example, if I start VS2005 normally, it comes up as “focused” in the Windows Task Bar, but the titlebar for the application is in light-blue, indicating “unfocused”. However, if I start VS2005 and switch to another program while its still loading, when the main window is drawn in the background, it comes up properly as “unfocused” in the task bar, but the titlebar is drawn dark-blue, indicating it is “focused”. In this case, both the program I was using and VS2005 “think” they have focus but in reality only the program I was actually using has focus.
Modifying the app.config file from within code must be done by manually parsing the XML document. While I most definitely understand the reasons for this, it makes it very difficult to create an Administrative Tool that lets you set the system-wide defaults or a Windows Installer Custom Action to set site-wide defaults. Microsoft admitted it didn’t include an easier way because it might cause bad programming habits (read: make bad programmers worse out of their own stupidity).
And finally, my saga in upgrading VS to Service Pack 1:
Trying to install VS2005 Service Pack 1, Windows update spent a couple hours downloading it, and the install failed. No reason given (except some cryptic error code found after digging through some log files and the Windows Update website). So I tried installing a 2nd time, and during the install I realized it was because I ran out of disk space. Granted, I wasn’t doing too good on disk space to begin with, I still want to point out the inefficiencies of Windows Update:
- Windows Update downloaded the file (dated a few days before I even started the download) to C:\WINDOWS\SoftwareDistribution\Download\d4b5c73253a7a4f5b4b389f41b94fea4a7247b57 – 431MB
- Windows Update then copied the file to C:\WINDOWS\SoftwareDistribution\Download\Install\VS80sp1-KB926601-X86-ENU.exe – 431MB
Proof (md5sum):
19194baf126fdd7cfbe4f09697db609f *d4b5c73253a7a4f5b4b389f41b94fea4a7247b57
19194baf126fdd7cfbe4f09697db609f *Install\VS80sp1-KB926601-X86-ENU.exe - Windows Update then executed the latter, which extracted itself to C:\Documents and Settings\Brian\Local Settings\Temp\ZNW20F\VS80sp1-KB926601-X86-ENU.msp – 455MB
- At some point, this file was created: C:\WINDOWS\Installer\580c9cba.msp – 455MB
- You guessed it, copies of each other:
(md5sum)
c0f76019179ed25d23fa2bae65357367 *580c9cba.msp
c0f76019179ed25d23fa2bae65357367 *VS80sp1-KB926601-X86-ENU.msp - During the install, backups (“Rollback Script Files”) are created in C:\Config.Msi. This grew to 1606 files totaling 1.04GB before being deleted just prior to the install finishing.
- For good measure, a log file created during the install in C:\Documents and Settings\Brian\Local Settings\Temp\VS80sp1-KB926601-X86-ENU\VS80sp1-KB926601-X86-ENU-msi.0.log grew to over 40MB.
- All of this took 2+ hours with this un-minimizable window as my only clue: screenshot.
- Total disk space used for temporary files: 2.8 Gigabytes. Wow.
Just wait for Vista! Those MAC ads classify it best… “You’re coming to a sad realization; cancel or allow?”
I can’t even image how freaking slow any of the MSFT products will run on Vista which can soak up 40% of quad core CPU at idle!
You are so right about those Crystal bugs. They still haven’t been fixed in VS 2008. I’ve wasted 3 days of development so far trying to get reports working.