Archive

Archive for the ‘visual studio 2008’ Category

The using statement and XmlReader.Create

September 7th, 2009 No comments

Are you also fond of using the using statement (e.g. when dealing with streams)? I am, since it kind-of guarantees me that streams are closed when I think they should be closed, even if I do not specify the Dispose() command. You probably noticed the ‘kind-of guarantee’ part. You are right, this is not always the case. It took me a while to find out the the following is not going to work as smooth as expected:

using (var reader = XmlReader.Create(File.Open(fileName, FileMode.Open)))
    { ... }

You probably wonder what’s the problem of the code printed above. I don’t see it too, however, I know there is a problem related to this code. The problem lies in the Create overload used in the example code. It uses default XmlReaderSettings. Unfortunately, this settings do not include having the CloseInput property set to true. You can do the math: no closed file at all! That’s a guarantee for having troubles on the file ‘being in use already’.

The solution to this problem is quite simple:

using (XmlReader reader = XmlReader.Create(File.Open(path, FileMode.Open),
         new XmlReaderSettings { CloseInput = true })) { ... }

How can we call this? A ‘bug’? No, at least not technically spoken. Since the XmlReader creates the stream, it should close it too. The case is, you should not expext it knowing the using statement as most people know it (fail-proofing your code). Since I know this, I am a little bit scared about using using statements without calling the stream’s constructor. You can do so, but be sure it does what you expect it to do… In my opinion, the using statement still remains very helpful, please I do not consider it being as perfect as I thought it to be for years ;)

Categories: .NET, bug, c#, tip, visual studio 2008

Solution: The operation could not be completed. Invalid FORMATETC structure

July 2nd, 2009 No comments

This morning I ran into a ASP.NET bug in Visual Studio. Dragging a custom server control on an aspx file was not possible since I had ‘an invalid FORMATETC structure’ (what the …. is that?!). The message box alerting me something is really really wrong is this one:

The FORMATETC bug

Trying to solve the bug, I  found the following attribute to be the problem: [ToolboxItem(true)]. Just delete the attribute, rebuild the application and the problem/bug disappears!

Good luck! Happy coding!

How to detect installed CLR versions and how they are used…

June 2nd, 2009 1 comment

It has been a while since I posted anything on my blog. Sorry for keeping you on hold ;) ! I think the blog will be filled with some information shortly, since I am still overthinking all the great stuff I saw on Tech-Ed North America a couple of weeks ago (first I had to overcome the jetlag, then the weather in The Netherlands, etc. etc. :) ). Enough nonsense for now!

While attending a session by Scott Hanselman on everything new in .NET 4.0 he showed a wonderful small tip, not only useful for the few of us already working on Visual Studio 2010: when working in the VS.NET Command Prompt, there is a small but useful command called ‘CLRVER’. It shows all .NET versions installed on your computer. Also, as an addition to this command, you can show active runtime processes using the -all switch. Nice piece of code! Enjoy!

Delete workspace from no longer existing TFS

March 27th, 2009 No comments

A week ago I started to use a new TFS server (TFS 2008). The old TFS server got phased out yesterday after moving all sources to the new TFS server. Doesn’t sound like a problem, does it? However, I forgot to remember my laptop: my old workspace was still in there, but to delete a workspace the normal way the TFS server should be available. At itself, this is still not much of a problem, however: when you would like to map your new source control folders to the old ones on disk, this is not possible since the old workspace is still mapped to that location. Arghhh!!!

Luckily, there is a tf.exe command tool switch (discussed a few minutes ago in my previous blog post) to cope with this problem: use ‘tf workspaces /remove:*’ and all cached workspaces will be gone! Problem solved!

Search and replace with Regular Expressions in Visual Studio .NET (2005)

March 10th, 2006 No comments

Today I had to search and replace a text with a little variation in it in a very large project. This text looked like ‘if<zero or more spaces>(Null.IsNull(<object name>.<variable name>))’. I had to replace it with: ‘if (!<object name>.<variable name> > 0))’. This turns out to be quite a job, especially when you are not very experienced with Microsoft’s way of dealing with regular expressions. Finally I discovered a way to do the job. The expressions used for it are the following:

Search string: if[ ]*\(Null.IsNull\({:c+.:c+}\)\)
Replacement string: if (!(\1 > 0))

Note that the Regular Expression used to search does not entirely look likea normal RegEx. Microsoft seems to use their own kind of RegEx for search and replace. Important is that {} is not used to quantify like in RegEx (for instance: zo{1} matches ‘zo’ but not ‘zoo’), but to generate a tagged expression, which can be used in the replacement string by giving in \x whereby x represents a 1-base number (1st replacement = \1 and so on).

Hope I have been of some help for anybody out there :) . Please do not be concerned about posting a comment/question. I’ll do what I can to answer you soon!

Bert