I honsetly can't say that I have ever seen a commercial app that uses .NET (other then controls for devs/open source). With it being so easy to 'decompile' a .NET application using RedGates .NET Reflector, I was wondering if .NET was geared toward ASP.NET (since you can't 'decompile' because the code runs on a server and is not stored on the users machine)?
Well personally, I use Microsoft Pro Photo Tools for geotagging. It is written in .Net. You can also obfuscate the code to make it so the reflector tool cannot read it. Read Microsoft's article on obfuscating a .Net app.
I know of enterprise applications that use .NET, though I think most use managed C++, which can't be decompiled with Reflector.
I personally sell a .NET based Windows application. I use Eazfuscator.NET to obfuscate the code. There are lots of commercial and free tools that obfuscate .NET code after compilation.
My company builds medical imaging applications in .NET 3.5 with WPF. I am currently developing my own application in .NET as well.
Paint.NET is writen, oddly enough, in native code. I'm blatently lying about the previous sentence. It's obviously written in .NET.
It's more prevalent than you may think.
As someone else mentioned - you can use an obfuscator to make it more difficult for others to decompile your application. It's not impossible, but it's more difficult - that being said, anything can be decompiled/reversed engineered given enough time/resources.
The Microsoft Expression Studio is .NET
Visual Studio 2010 is .NET
Red Gate Software is (mostly) .NET
...there's also SharpDevelop (open source though), and Microsoft Pro Photo tools.
Many commercial software products use .NET. One of my favorite games, Auran's Trainz series, is written largely in .NET. But I would agree that a larger portion of their focus for .NET is internal business apps and web based apps. I think, however, that as WPF gains traction that you will start to see a lot more Windows apps use .NET as their backend language. And as others have said, there are a number of tools available to help obfuscate your code. But if your concern is reverse engineering, pretty much any development language can be reverse engineered if someone really wanted to.
FlashDevelop (open source) is another good one http://www.flashdevelop.org/wikidocs/index.php?title=Main_Page
ATI / AMD uses .NET for some of it's packaged video card applications.
Oracle provides .NET libs for the DB. And also runs .NET code inside Oracle to support .NET procs (Windows Only).
Don't forget that F-Spot (photo manager) and Banshee (music) are both written to run on Mono, which, leaving politics and patents out of it, is .net for linux. But they are desktop apps.
- iBlocks (now adeze)
- Microsoft Office Accounting
- BabySmash (non-commercial)
Media Center (some parts, mostly the interface)
Zune player (parts)
Expression Blend
Nikon Capture NX for Windows requires .NET Framework, though clearly the entire thing is not managed code.
SourceGear Fault and Fortress clients.
Novell's PlateSpin Migrate/Protect and Recon products all have .NET Desktop Clients. These are however, targeted towards the enterprise, rather than the consumer.
Disclaimer: I work there...
Other way to complicate understanding of your code is writing critical parts in some exotic language like F#, IronScheme or other.
Some of the more modern utilities that Linn Products uses for managing its high-end audio system components are written in .NET
Instead of mentioning each .NET product you ever stumbled upon, let just remember everyone that Java is also running in a JVM and can be reverse engineered in the same way and for the same reason as .NET
And Java has been used everywhere from the desktop to the server in many different domains long before .NET was mature.
The obsession about R-E for "business"/"serious" (choose your favorite "I'm better than others" adjective) application is overblown.
I admit that code-stealing happens (however, that's often for small shaddy businesses than can do this without being noticed...otherwise PR damages are too great). But if someone wanna R-E your application, he will do it no matter how many protections you tried to add. A little protection is good, but going crazy other it is just stupid.
I write a com interop plugin to a CAD system using VB.net. It easily handles all of the requisite 3D mathematics without having to resort to using the CAD engine functions. Originally it was written in VB6. I have to say that it is a joy using .Net instead of VB6. I am far more productive, the code is a lot cleaner and more loosely coupled. As some of the previous posters said, if you need some hard core performance you can always use c++ or c. If you develop on a windows environment, .Net should be your first choice (at least for the presentation and business layers).
Am I worried about reverse engineering, yes. But not enough to really jump through the obfuscation hoops. I feel it is much better to spend time improving the application instead of figuring out ways to protect it outside the basics. If people want it badly enough they will get it. My biggest concern with reverse engineering is revealing the proprietary algorithms that I have used. Again, most of our customers are not computer literate enough to make that a concern.
Cheers, Troy
The XNA Framework allows independent developers to write XBox 360 and Windows games in C# managed code. These are available commercially via XBox Live:
http://catalog.xna.com/en-US/gamescatalog.aspx
The fact that the game runs on the XBox platform makes it more difficult to reverse-engineer the code, but I suspect not impossible.