Rory Primrose

Learn from my mistakes, you don't have time to make them yourself

View project on GitHub

GetPublicKey - InternalsVisibleTo

I posted previously about using the InternalsVisibleTo attribute for unit testing and how I had come across David Kean’s very helpful PublicKey application. I have been using this application for the last month or so and it has been great, until yesterday.

I changed the snk file used by my solution. This caused an interesting Catch-22 situation. AssemblyA couldn’t compile because it had an InternalsVisibleTo attribute pointing to AssemblyATest, which now has the wrong PublicKey value. AssemblyATest couldn’t compile because it directly references AssemblyA in order to run the tests.

Unfortunately, David’s PublicKey application works from binaries alone. Because I can’t compile the assemblies, I can’t regenerate the InternalsVisibleTo attribute with the correct PublicKey value.

Read More

Code Metrics fail to calculate

This is an interesting one. I have a solution for a WCF service that contains the business and data access layers. When I run code metrics for the solution, two of the projects fail. One is the IIS service host project, and the other one is the business layer implementation project.

Both projects fail because they can’t read another module. The modules that they can’t read are direct project reference. The reason provided is:

Could not resolve type reference: [mscorlib]

There is no information about this on the net that I can find. Is anyone else finding this problem?

Read More

VS2008 Code Analysis Dictionary

VS2008 Code Analysis has new features that provide spell checking. This is really great, but sometime you need to provide some additional information as to what valid words are. This is normally due to the spell checker not knowing your company name and product names. Quite understandable and thankfully it is configurable.

If you look at the help for the Identifiers should be spelled correctly rule, it refers to a custom dictionary. Unfortunately, the help documentation is quite unhelpful where it indicates where the CustomDictionary.xml file is stored:

Place the dictionary in the installation directory of the tool, the project directory, or in the directory associated with the tool under the user’s profile (%USERPROFILE%\Application Data...).

Read More

ReSharper for VS2008

I came across this post about the direction of ReSharper for VS2008 via a Scott Guthrie post. It is good to hear where ReSharper is going now that VS2008 has been out for a couple of weeks.

I am using VS2008 with a ReSharper beta and for the most part it is working fine. I have read about people having many problems with the beta, but I haven’t had that many issues. I think a buggy ReSharper is certainly better than no ReSharper. I tried going back to VS refactoring and it was so unproductive.

I find it unfortunate that some people are giving the ReSharper team a hard time for not getting a new version out sooner given that VS betas have been around for quite a while. Perhaps they have no idea how much work would be involved in developing and testing something like ReSharper. Maybe they also haven’t heard about work/life balance. Those kinds of negative comments don’t help developers motivation to get the work done.

I am looking forward to the next ReSharper version. Obviously sooner is better than later, but stable and reliable is better than sooner. [:)]

Read More

Installing Orcas - Where is Team Explorer?

This was an interesting one. I just installed Orcas Team Suite Beta 2. I would have assumed that Team Suite was the complete package. Everything I needed. Nope, not quite. Team Explorer is missing.

To get Team Explorer, you have to run the setup package for Team Foundation Server in order to then install the Team Explorer client software. Does this sound right. Having to run a server installer to get access to client software???

Read More

Hashing on the fly

I have been a fan of hashing data for a while, especially for calculating SHA1 checksum values. Until now, I have always had access to the entire set of data that needs to be hashed. Using the SHA1CryptoServiceProvider makes it so easy to build a hash value. You just throw a stream or a byte array at the ComputeHash method.

What if you don’t have all the data available? Streaming is the classic example here, especially when you are dealing with a stupid amount of data. It is not wise to hold an entire data set in memory if the amount of data is large. In addition to memory issues, buffering the entire data set while streaming in order to calculate a checksum destroys the point of streaming your data.

Using Reflector to checkout the HashAlgorithm implementation, I thought that there wasn’t a way around it as the ComputeHash methods call down to internal methods. After thinking for a while that it wasn’t possible to create hash values from chunks of data, I went back and had a look again. Turns out there are publicly available methods to support this. TransformBlock and TransformBlockFinal are the methods to call. I found the naming misleading which is why I previously overlooked them.

With these methods, you can now stream your data in chunks and build a hash value on the fly without needing the entire data set.

Read More

WCF netTcpBinding service in WS2008 Beta 2

Yesterday I got the opportunity to start playing with WCF net.tcp services hosted in WAS on Windows Server 2008 (Beta 2). There were a couple of hiccups, but it was surprisingly painless.

Firstly, I got the service up and running over wsHttpBinding. One thing I noticed about this is that, unlike XP Pro (and I think Vista), IIS7 on WS2008 doesn’t need anonymous set against the svc file for the service endpoint when the rest of the site was running under Windows Authentication. Straight away, this service was working using a remote client over http.

Next up was trying netTcpBinding. First job was getting the required features installed. This MSDN article provides the details as:

Read More