How I fixed Visual Studio crashing when opening XAML (WPF) files
For the second time, Visual Studio 2008 began crashing when double clicking on a XAML file. In this case, the crash was spectacularly underwhelming. No error message, blue screen or other indication of something horrible happing. Visual Studio would simply go a way, or “blink out” as I’ve seen it referred to.
After much searching I was able to determine that the PowerCommands for Visual Studio 2008 extension was somehow involved in the problem. I tried quite a few different solutions including adding a dependantAssembly reference in my Visual Studio configuration, doing a clean solution then rebuilding the project. Up to that point the only thing that worked was uninstalling the extension. Reinstalling afterwards would cause the problem to return.
Working without PowerCommands was an option I did not want to consider. Many times each day I would use functions such as “Open Command Prompt” which fires up cmd.exe starting in the directory of the file or folder selected in the solution explorer or “Open Containing Folder” on a file, just to mention a couple. It was looking like that was going to be the only solution, I was bummed.
I decided to check with the source a bit further. I looked through their issue list and the top voted issue was VS 2008 crashes when adjusting toolbox items. Reading the description did not give me a lot of hope as it dealt with a problem when the toolbox items were adjusted. It also included an actual error which was lacking in my case.
Among the comments to the above issue, I found the suggestion to run the command “ngen /delete *” (without the quotes) from a Visual Studio 2008 command prompt. Ngen is the native image generator which creates native images from managed assemblies and installs a native image cache on a computer, which is a reserved area of the global assembly cache.
Wow, that sounds important, and I’m suppose to delete * (star)? Ok….I was desperate and I did it before investigating what it meant. Dangerous, I know, I know, but as I said I was desperate!
It worked. Nothing seemed to break…and it worked. Ok, off we go! Wait, time to investigate….just in case problems start cropping up later.
Running ngen /? from the command prompt yielded no information, not a mention of the /delete switch. In my experience, when a command line utility fails to mention an argument that clearly did something, this is an argument that should only be used with full knowledge of what it does. Now I started to get nervous!
I did a quick Google Search and was lead to the MSDN documentation for ngen. It seems that my little command deleted all native images in the native image cache. Hmm….that sounds bad. Fortunately, a little further down the page the following information was also present.
This made me feel a little better. The assemblies were still there, simply not the native images for them. Native images simply cause the applications or assemblies to start up a bit faster. With today’s hardware, I don’t know that I’ll even notice a difference, or if I do, it will be worth it to keep PowerCommands and get rid of the problem.
If this behavior resurfaces, I will do a little more investigation by using the /show argument to find out what native images are installed. Then I will started deleting them one at a time to find the culprit. My guess is that one of the native images somehow became corrupted, or the configuration for it got messed up or something like that. Perhaps finding the culprit will aid in the resolution of the issue that this wonderful extension is experiencing by, if the Google results are any indication, a fair number of developers.
Visual Studio 2008 RTM
Microsoft shipped Visual Studio 2008 to manufacturing today. According to some it has become available for download on the MSDN subscriber site, but only the Team Suite edition. Since we do not have the “über” subscription (I believe ours is one step below that) we’ll have to wait for MS to make the professional edition available.
Update: I finally was able to start downloading. Apparently MS decided to use a different distribution method (Akami?) to get over the initial rush, or at least that is my guess on the matter and it is purely my own speculation. The download location was not the normal MSDN subscriber downloads area. In addition, I had to install a new download manager and of course allow popups from msdn2.microsoft.com before I could get it started, but now it’s on is own merry way to my computer! It’s coming down at a good clip too, ,about 570 KB/sec so if things remain as they are I should have it within a couple of hours.
Good luck to anyone else, hopefully grabbing this one
Viewstate – Search Engine Update
I’ve been out of town for a bit so I’ve been behind on checking the test Dave has been running. If you haven’t read the original concept, please do so.
Today I noticed that page 4, one with a large viewstate, is showing up #1 at Google. To my knowledge, this is the first time one of the pages has received the #1 spot.
I’m not sure why the other pages are not showing up. Perhaps they are being marked as duplicate content or something, but it is interesting that the page with Viewstate is the one ranking right now.
Viewstate Effects on Search Engines – Part 2
It has been 12 days since Dave put up his viewstate test pages with the keyword Arkliode. Watching Google each weekday has brought about a few interesting thoughts
- Initially the index page with a link to each of his tests ranked #1. This went on for most of last week.
- One of the tests ranked under the index page when you click on the “View similar results” link on the initial Google search.
- My original post was ranking #2 for most of last week. It only had the word “arkliode” once in one of the comments.
This morning, my original post shows up #1. Yes, that is the post with the word only displayed once in a comment.- Google gives more weight to blog posts. This has been generally accepted for quite a while. That explains the change in #1 ranking.
- Incoming links play a large part in the role. I am attributing that reasoning to the drop of the one page that was returning in the results. The incoming links simply go to the index page.
- Duplicate content has been assumed to have a negative impact. Since most of the test content pages have the same or very similar content, I am theorizing that Google is recognizing them as duplicate and since the only links going to them are from the index page.
The next question is, how do we begin to make the test valid? I suppose we would have to post the different pages on separate sites to try to get a better idea, yet the popularity and ranking of the sites would undoubtedly play into the ranking.
Dave has changed things up a bit, which might account for the changes over the weekend. Should people begin linking to the pages on their sites to see if indexing begins to happen? That’s what Dave did. Here are the links to the pages.
I will check back in later this week or early next week. I’m sure Dave will have at least one update in that time-frame as well.
Back to writing, craziness calming, TFS and a test passed
Wow, it’s been a busy few weeks. Seems like work has kept me more focused than normal with certain work items needed. I apologize to my loyal readers for the lack of content recently.
I have had my first real look at Microsoft Team Foundation Server and I must say I am not impressed. It looks like it has some nice features, however I would not say that it is worth the price of admission. Licensing seems a bit high and the preferred method of using it via Visual Studio is a bit clunky. The add-in (Team Explorer) works well enough, but it is plain and seems to bloat VS as many add-ins do. If I am going to settle for reduced performance in my development IDE I would expect more out of it. At this time I am looking into SharpForge, a somewhat new and growing open source project designed to perform some of the functionality of TFS or SourceForge. The web interface from TeamPlain, recently acquired by Microsoft, is not bad. I will admit that I am a bit predisposed against the entire system since it is based on Microsoft SharePonit Portal Server. I have yet to be convinced that the platform is desirable enough to move to.
In the mean time, I also passed another test on my way to MCSD and then MCPD. 70-315, Developing Web Applications with Visual C#.NET is complete. On to the next one! Target date is set for 3 weeks, although budget may push it to next month. I hate tax time.
Cheers!
Visual Studio error messages..or…lack of useful information
One of my colleagues at work has been talking about posting some of the more interesting errors that he’s received from Visual Studio. Since I sit next to him, I’ve had a chance to see most of the messages, and I’ve received a few of them myself.
One of my favorites is “Unexpected Error”. Well, of course it is unexpected, otherwise I would expect the program to handle more elegantly, provide more information or perhaps fix it! A friend of mine that is a former Microsoft employee says that this message is one of his pet peeves, not just in Visual Studio mind, but in any application. I met him ten years ago when we were both on contract to the same company and I can remember back then his disdain for a programmer who let one of these slip through. Laziness, nothing more, is responsible.
You might ask, how can any developer anticipate every single exception that may occur? They can’t of course, however even for those “unexpected” errors they should have something better to tell the user. Unexpected error is almost a redundancy for goodness sake!
Thanks for the interested read Dave.
How Microsoft “Acquires” New .NET Features
I just finished reading David Starr’s recent Open Letter to Scott Guthrie. I must say bravo! David, you have hit a lot of good points about the apparent strategy Microsoft has been employing recently regarding the way new features are brought into the development tool-set.
David points out the way some of the features that have been rolled into the .NET Framework or into the Visual Studio Team System lately have had roots in the open source community. Examples of the unit testing, MS Build, etc.. Most of these are welcome additions to developers that have lived without them, however those of us that were early adopters of NUnit, NAnt and other projects realize that these pale in comparison to the current releases.
Microsoft has done a lot for the development community, don’t get me wrong. I love the .NET Framework, the productivity and power it brings. I also believe that Microsoft has had some successes with their new features. The ASP.NET AJAX extensions exceeded my expectations. After using other open source libraries such as Michael Schwarz’s Ajax.NET, and then seeing some of the earlier ATLAS releases I though that Microsoft was on a path to “do it again.” I decided to give the RTM a try and was pleasantly surprised with the jump they made from some of the CTP’s to release. Way to go guys!
I have two friends that are former Microsoft employees. One was with MS for over a decade and as such has what I (and others) like to refer to as “Microsoft Blinders”. His enthusiasm is great, however he fails to give most non-Microsoft technologies much of a chance. This is too bad and I feel that, although he is brilliant, this limits him slightly. Don’t get me wrong, I highly respect his skills, his architecture and he is a great person. It does lead me to believe that many inside of Microsoft share this viewpoint and that may be the reason they bring some of these features on the way that they do.
Scott and crew, please take Davids letter seriously. There is an army of .NET developers out here who are genuinely happy with the framework. Please don’t dishearten those of us that have used these open source libraries with less-than implementations of your own and do not make us wait for the fabled “version 3″ which we all feel to be the first “usable” release of most Microsoft products. When there is already something in the community that fits the bill, giving us less hurts. You have the resources and the talent, live up to the vision!
One thing though David, what’s with the rabbit ears? I suppose it may be antenae however such as those worn by Arthur from The Tick.
Troubleshooting Memory Leaks in .NET
OK, you’re still here. You are a brave soul if you’ve stuck around after a title like that, or else you are desperate! That is exactly where I found myself over the last two days.
A product we are currently working on has a process that, well, processes a lot. It goes through several different data gathering, manipulation, saving and printing operations. The end result of this process is a print job that takes about an hour and produces about 1000 printed pages.
For the development we normally sent the jobs to a PDF printer or simply had it stop after printing 20 or 30 pages. Finally the time came to give this a real test, a complete dry run!
*poof*
I know what you’re thinking, “you should have done that in Dev at least once!” You are right of course, however sometimes we let things slip due to schedules and pressure. Lesson learned, I hope!
It appeared as though there was a memory leak causing the application to crash. Monitoring the memory usage with Process Explorer confirmed this to be the case. Now to the task of tracking it down.
I must admit that I have never had a leak like this one. After some initial code reviews there were a few places where we were able to determine the potential for problems. Implementing code to fix these “phantom menaces” were not successful. Now it was time to really dig in. The downside was, I did not know how to dig, and I didn’t have a shovel.
After some searching around on Google, I ran across Finding .NET Memory Leaks by Phil Write. It was not the easiest thing to find, but it was well worth the time. Phil goes step by step through using sos.exe (Son of Strike) debugging extensions. He explained the basis of how to track down what you think the problem is. Unfortunately the problem was not that easy to find. I ended up doing comparisons of the output of !dumpheap -stat from very early in the process and another dump from much later on down the line. It was a tedious exercise, but a necessary one. Finally I happened upon an object that had a large jump in it’s count between the two samples. Now I had a place to start! Using Phil’s instructions again I was able to find out what was holding on to a reference and implement a fix. It also lead me to a second leak that we did not know existed and had been around for quite a while. It turned out that the first leak that we fixed would not have been a problem if the other one had been behaving properly.
This is a good example of why bugs can be good. The second memory leak will be taken care of within the next day or two and the product will be that much better for it.
Success!
Thanks Phil for such a wonderful and simple to understand article!
Review – VI emulation for Microsoft products
If you, like me, find yourself using Microsoft products for your daily operations (or are forced to as some) yet you have a background in which you have a comfort level using vi, the *nix based text editor.
The percentage of people that prefer to use vi is probably small compared to the people using notepad, emacs or pico or other simple editor. It takes a certain amount of masochism to plow through the various commands used to move around, edit, replace etc.. inside of vi but for those of you that have that trait as I, vi gives you a productivity increase that is unparalleled, in my opinion.
Now, if only we had that in Windows!
Fortunately we do. For several years now the vi project has had a Windows text editor which I use. It is a very good implementation within the Windows environment. For editing text based files where you do not need any further functionality, I highly recommend it.
Now, on to the fun stuff!
Jon at NGEDIT Software has a few products that have made my life a lot easier. It falls under the heading of VIEmu, the vi-vim editor emulation for Visual Studio, Word, Outlook and SQL Server. I can tell you that, after downloading the Visual Studio trial and running with it for a few weeks, I have purchased all 3 (Word and Outlook are combined in 1 package) products. They are wonderful!
You should not expect 100% vi-vim compatibility, there are some things that just do not work quite the same, however most of the basic and much of the advanced functionality is available. There are a few quirks as well, such as the need to use Shift+Esc instead of just Esc to get out of some modes, but they are workable once you get use to them.
I should say that this review was not sponsored in any way, nor did Jon or anyone at NGEDIT Software know about my writing of this before publication, I do believe in full discloser of sources and sponsorship when posting (thanks Robert Scoble for the inspiration), this is purely a fan-driven review of these products.
The Word and Outlook version is a bit young, only version 1.0, however the Visual Studio product has been around a while and the SQL product just a bit less time. So far all have been performing well and my productivity has increased, at least I believe it has.
If you are/were a vi-vim junkie living in a Microsoft world, I urge you to head over and try it out for yourself. I think you will be happily comfortable again within the embrace of vi-vim!