Recently I stumbled upon Thinstall
that links the used parts of .NET framework and your application into a single distributable file. Many people finds this great as they do not have to distribute the .NET framework. Is there any downside?
What about users that use multiple applications based on the same framework version? That is easily solved by the application distributor by offereing a pure .NET version and a statically linked version. Imagine your app is 1MB, linked with .NET it is 9MB, the framework is 20MB. You saved 12MB but if the user gets a couple of other .NET applications of similar size they will have downloaded 27MB where maybe 23MB would have been enough.
How about security updates to the .NET framework. Usually these are pushed by Microsoft Windows Update and vendors of .NET application usually does not have to worry about updating their software to make use of any security updates, or other bug fixes to the framework. With a statically linked application you will need to get the new version from the vendor. Probably not a big hassle as long as you only use a single one .NET application. If you have the framework and a statically linked application you need to retrieve two updates.
You will reduce distribution size for users without the .NET framework, but in the long run I see no benefits of this linking/distribution model for end users.
- There will be no benefits if the end users want to run multiple .NET applications as parts will be distributed multiple times.
- There will be more code running for supporting a .NET application resulting in more possibilities for bugs.
- More code running does not improve performance.
- Updates to the framework will not be used if a linked application is used.
This kind of distribution will not stop hackers or dis-assembly as claimed by Thinstall. It might make it a but harder but never stop it. Software that runs on my computer can always be changed by me.
I saw a question on the MSDN forums on how to parse a number written out to a numeric value. This got me thinking on how it could be done and I made a sample on how to do it. It is dynamic and can be extended to support other languages by changing the dictionaries.
Here is a class I came up with that handles it. It does not validate the number so there is some work left to be done to fully handle it. The same logic can be reversed to write out a numeric as text.
TextToNumber.cs (5.45 kb)