I did a (very) quick trial of the latest build (666!) of ILSpy the other day. I was impressed. Its features are very similar to those of .NET Reflector, and it correctly disassembled a fairly simple static method. It’s good to have alternatives. Hopefully ReSharper will have this ability soon.
Red Gate has announced that it will charge $35 for version 7 of .NET Reflector. What’s more, the free version will stop working after May 30, 2011. And the $35 will not entitle you to a free upgrade to version 8.
This after they said “Red Gate will continue to offer the tool for free to the community.” Not “will try” but “will.”
I don’t have much choice. Reflector is a key tool for my work. Either my employer needs to purchase it or I do, and the cost is not a hardship.
This is a matter of principle. I’m fully in favor of capitalism and for-profit companies. They don’t “owe” us free software. But when a company flat-out lies to its customers, trust and loyalty go out the window.
I support individuals working on open-source alternatives, including donation-supported projects. I would consider competing commercial solutions; I have no problem paying reputable companies for my tools.
Don’t let them get away with this.
Update - February 4, 2011
The best coverage I have found so far is on ZDNet. It includes their side of the story.
Update - February 24, 2011
ReSharper version 4.5 added significant functionality to the Solution-wide Analysis feature. I have found this to be a valuable tool. However, it’s wise to be extremely cautious about removing public members that ReSharper says are never used.
I would not expect ReSharper to know about projects that are not part of the current solution. If you’re creating a shared library, you’re likely to see a lot of “unused” public members.
What was less obvious to me is that data binding is not detected by ReSharper in this context. For example, say I have a public string property named FullName on a class. ReSharper displays a hint that “Property ‘FullName’ is never used". ReSharper’s Find Usages likewise finds no references. The property may still be data-bound to a control, though, since data binding generally references the property name as a string. Removing the property would cause a runtime failure.
ReSharper’s Find Usages Advanced can be used to find the binding, if Textual occurences is checked.
“Class ‘Foo’ is never instantiated” hints may also be incorrect. IoC containers (such as Unity) or other Reflection-based techniques can fool ReSharper.
Please note that I’m not suggesting turning off Solution-wide Analysis (and if you’re not using ReSharper, you’re working harder, not smarter!). Just be aware of its limitations.
Update - August 17, 2009
The UsedImplicitlyAttribute can be used where necessary to mitigate this problem.
:: Next Page >>
Development Central is the blog of Bill Sorensen, a professional software developer. Much of this will relate to C#, .NET, and OOP in general.
These postings are provided "AS IS" with no warranties and confer no rights.
| Next >