If your question was "will a user have to re-download 20meg every year or so to get an updated runtime", the answer is unknown. I would guess there would be smaller service packs, hotfixes, etc. to cover the majority of "necessary" upgrades. When it comes to updating a system, there are generally two categories of users: those that upgrade everything and those that never upgrade. For those that never upgrade you only have to worry if you develop on the *newest* version that isnt compatible with an older version. For those that upgrade constantly, you only have to worry if the new framework breaks your code - a very unlikely scenario. Ive
never had an issue with the MS runtime causing problems because of an upgrade. The worst thing Ive seen is a bunch of controls getting a white background instead of grey one because of an outdated DLL - still not the runtime. Now 3rd party DLLs on the other hand - well, dont get me started
You might think of it this way - if there were issues with programs breaking because the runtime wasnt backwards compatible, there wouldnt be many people developing with it. Thats good enough for me, especially since I dont want to write a compiler (Ill let MS do their job on that one).
Im not sure what you mean about native code...
.NET doesnt compile to native code normally - it compiles to an intermediate language that the runtime compiles "just in time" as the program is loaded. As a developer you have the option of compiling the code into native code for better startup performance using the tool ngen.exe but you run the risk of decreasing performance later. The "compiler" optimizes for the machine its run on and cant be recompiled later. This means future compilers, which might optimize better, cant be used later on. Also, if you "compile" on a machine different than the end-users machine, your app may be optimized incorrectly. This could be especially true a few years from now as 64bit processors come out - not to mention a new OS.
To help out with preventing "DLL Hell", MS has changed its strategy on deployment. You should check out the help file at:
Visual Studio .NET -> .NET Framework -> Deploying Applications
It contains a ton of information on what you need to worry about when deploying your app, including upgrades and how the framework finds the right DLL at runtime. Theyve put a lot of effort into helping us developers get the program running on every machine. It does still mean we have to know a *lot* about whats going on at runtime to figure out how to get our installations to work right *every* time.
For the record, what kind of shareware program are you writing or thinking about writing?
-Nerseus