May 2003 - Posts
*WHEW*
I just spent the past 4 hours completing the rewrite of GenX.NET for Version 3.0. Most of that time was spent converting my comments over to the new format used by Joe Feser's VB-XML Comments Creator VS.NET Addin, which is still in alpha-testing. Thanks to Joe, you can now comment in VB like this:
'''<summary>
'''Blah blah blah
'''</summary>
Yes, I know that there were a few components that do that already, but I like the work Joe does.
The rest of the time was spent refactoring my architecture for the app. Version 3 is the bridge between the current hard-coded output system, and the XML/XSLT-based "output provider" model I want to create for Version 4. At this point, I'm 6 hours ahead of schedule, so I intend to attempt to add "Stream2Browser" and, hopefully, XML support. I was going to wait until V4 to provide these features, but since I got the rewrite done so quickly, gonna try to add some more value. Oh, ya. I have to add the licensing functionality as well.
It took 4 versions, but I'm finally uber-happy with the code, enough so to launch a full scale sales offensive. I had some outstanding ideas for co-marketing and so forth, and hopefully I'll be able to put them in my personal blog, which I'll be launching soon.
Been a long night. I got a ton done yesterday... WOO HOO! Oh ya, and I almost forgot. I talked to my new editor at Builder.com yesterday, and they gave me a full-blown column. I'll be published once a week from now on, starting with my favorite article on Data Layers that i submitted for the final edit cycle today. I'm also going to be a Technical Editor, although that won't be as often as I'd like. Gotta start somewhere ;). In my personal blog I'll do a lot more blogging about my writing process, but it's not appropriate for this forum. And with that, I'm off to sleep. Lots more coding to do tomorrow.
Jesse's been a big help to me over the past few days. Not only has he
provided the code to a really awesome part of the IDE, which is the inspiration for a killer new project I'm working on, but he's also come up with
a way to provide your own stylesheet for the WebLogs. I am now also using his sheet, although I will be experimenting with my own version when I have the time. At this point, that will be sometime in the early 20's.
A few days ago I promised to blog about MS' recommendations for versioning in .NET. Well, while visiting my
.NET Resources link, I came across
this article, and I don't think I could have written it any better. Check it out, and be sure to browse those resource links... there's good stuff in there.
Earlier last month I saw someone complain that you could no longer use aspnet_regiis in Windows Server 2003 running IIS6. Having just repaved both my employer's and my personal machine to run WS2K3, and installed VSNET2002 and VSNET2003 SxS, I can gladly say that this is not the case.
I wanted to be running WS2K3 so that I could mimic the configurations that my employer uses at both hosting companies, MaximumASP and OrcsWeb. Truth be told, I like the OrcsWeb setup TONS better than MaxASP, but this is all relatively speaking anyways since I like my own hosting setup the best. Anyways, some of the apps on my machine run off .NET 1.0, and some off .NET 1.1. There is a REAL simple way to remap IIS to which ever one you want on a per-application basis. Simply navigate to:
x:\%WINDIR%\Microsoft.NET\Framework\%FRAMEVER%\
where:
x = your system drive
%WINDIR% = your windows directory
%FRAMEVER% = version of framework you want to map, either v1.0.3705 or v1.1.4322
From there, just type aspnet_regiis -s /w3svc/%IDENTIFIER%, where %IDENTIFIER% is the ID of the Website in IIS6, as seen in this screenshot:

And there you have it. Your app is remapped. Now you can have different sites using different versions of the runtime, without messing with your web.config or publisher policies.
WOO HOO. .NETWebLogs... Now hosted by the ever popular Microsoft, who as of today, kissed and made up with AOL. Scott has done a fabulous job with the WebLogs, and it's great to be on the most popular .NET website on the Internet. Scott, keep up the great work, and I'm looking forward to this continuing to be the single best resource for .NET information by the people who use it every day.
Congrats ScottW.... you should be very proud. You've built something truly great.
BTW, we're at http://weblogs.asp.net from now on ;).
I'm working on an article (well, one of several that I am currently working on) about how to handle versioning in .NET. This is sparked by several threads about handling Framework versions, and my experiences with Xheo beta testing their components. Paul Alexander and I have a great relationship in regards to the software we write. Neither one of us has fully taken advantage of the situation we created for ourselves, but hopefully that will change in the very near future.
Anyway, I have come up with a versioning policy that extends from Paul's suggestions, and takes into account Framework versions as well. I think it is an extremely responsible solution, and I would like opinions on the matter. I intend to have my article finished next week, and I'm hoping to have you guys join me in making this a standard.
Basically, it boils down to this: Responsible component developers really should have a release compiled to each version of the Framework. IMO it's the right thing to do, in terms of performance and so forth. NOW, this might cause problems in regards to the GAC and so forth. In the AssemblyInfo.* file, there are several attributes that tell the File System and the GAC how to handle things. The primary one is the <Assembly: AssemblyVersion> attribute. Usually this value is set to something like "1.0.*", which causes the end to be totally random. When you browse your assemblies in Windows Explorer, under the name it shows the version, which will usually end up something grotesque like "1.0.3452.45678" This is one of my biggest beefs with Aspose, because their component versioning is horrid. But I digress.
My proposal is that vendors start versioning their .NET components just like we've versioned programs in the past... Like GenX.NET 3.0 and so forth. So the first part of my AssemblyVersion attribute would be like "3.0...". The next part is the kicker. With MS Framework assemblies, they come in 2 versions (usually). .NET 1.0 assemblies are versioned 1.0.3300. .NET 1.1 assemblies are versioned 1.0.5000. So, Your component's major and minor version numbers come from the component version itself, but the revision number is the version of the Framework that the assembly is compiled to. Example: GenX.NET 3.0 for .NET 1.1 = "3.0.5000". This way, when you're browsing assemblies in VS.NET, you see the similarities right there, and it would take very little instruction to have your users recognize the difference.
Now, say you're like Xheo, and you release updates to your components frequently. These are minor fixes that can hardly justify a new minor build mumber. Well, you don't want to change the revision number, because that's the .NET version pointer. Instead, add an <Assembly:AssemblyFileVersion> Attribute to the AssemblyInfo.* file. This controls the version that Windows Explorer displays when viewing the assembly information. Also, now you can XCopy the new assembly up to your app without breaking the assembly references.
A few unsolved problems still remain. I still think that .NET needs an Application Assembly Cache for each application, so that then you can use multiple versions of an assembly with the same name in the app. ALSO, VS.NET needs to be able to connect to a remote server's GAC or AAC so that web hosting providers can provide components without having to redestribute the assemblies. You install it once, and it's available for all.
That's pretty much it for now. I am going to be expounding on this in much more detail in my article, but this is the just of my idea. I'd lov e some feedback before I go to press with it.
Talked with Joe Feser today. Man what a freat guy. He's a frickin smart guy too. Informs me that he's finishing up the next version of VB XML Comments Creator (I think it needs a new name tho =) ). Yes, that's my logo for GenX.NET in the corner. I need to clean that logo up a bit and send him a better copy.
Anyways, this time he's made an addin for VS.NET 2003 that looks for " ''' < xml comment >"-esque stuff, instead of his custom attributes like he did before. The result is a much cleaner system that doesn't require referencing an assembly like the last version did. He was kind enough to give me an alpha release to test out on GenX.NET 3.0, which I am currently in the process of working on. Can't wait to try it out. Currently, it runs on every single build, but he's working on a way to be able to shut it off. SLICK.
In further thinking about GenX, I wanted your opinion. Do you think that a .NET utility that has nothing to render should still have design-time support? Personally, I don't think that it should, but I've been wrong before and I'd like to hear what you think. Please send me an e-mail or leave me some comments and tell me what you think.
In my ever-continuing quest for knowledge, I have been toying with an idea in my head about rewriting GenX.NET (my flagship ADO.NET Exporter component) to make better use of the OOP techniques that .NET has to offer. This would be the third major rewrite of the component. The first time I told Brady Gaster about it, he said "Why not use an Interface?" For Brady, that kind of thing is a no brainer. He used to program Java for Wells Fargo, and now he's probably one of the greatest C# coders I've ever seen. The way he cranks the stuff out just boggles the mind.
At any rate, since my laptop is currently unavailable, for reasons I'd like to but probably shouldn't discuss, I figured I'd take the time to look up how the IDataReader interface works. The ___DataReaders are the ones that give me the most headaches, because if I want to get support for other ADO.NET Data Providers, I have to talk to the company that made it, hammer out an agreement... blah blah blah..... it gets REALLY old. Now, this is not to say that I don't like working with companies like Proposion to help push components and so forth. Nor does it by any means suggest that I will not continue to work co-packaging deals in the future, because I believe that these types of deals are, quite possibly, the best kind of marketing you can do. What it means is, I don't have to add a whole new class each time I want to support a new ADO.NET Provider.
So, I took some time and rewrote the whole thing. It was quite a lot of fun actually, cause I've learned a lot in the past few months since the last time I really worked with it. Cause I'm a nice guy, I still keep a lot of the old classes available for backwards compatibility, but I use the Obsolete attribute (thanks ScottW) to warn the developer that the method should no longer be used. Here is the proper usage:
(message to display to the user, boolean value telling the compiler whether or not to throw a build error or just give a warning
)> _
Public Function MyFunction() As MyType
In my case, I don't want to throw an error, so I set parameter #2 equal to false.
And so, GenX.NET takes back the honor of being the best code that I've written so far, with my new Content Management System and my .NET Store coming in 2nd and 3rd respectively. You'll be seeing more about those in the near future. I still have a lot of things that I want to do to it, but I am now not ashamed to sell the heck out of it, and after I give it a spit polish and wrap everything up, I'll have it available for sale probably sometime early next month.
In other news, Rob Howard (still haven't seen a blog entry yet ) has released the first alpha build of ASP.NET Forums 1.5. NOTE: This is an EXTREMELY alpha build. Rob says there are so many bugs he doesn't even know where to start. The good news for you guys is, he's made a killer Installation Wizard that will actually create the virtual directory in IIS, and create the database on your local OR remote server, 2 things that I could not accomplish with the Forums Configurator. My next project will be to take the original FC code, revise it with the new things I've learned since then, and add Rob's code into the mix, and make it available as Forums Configurator 1.1. I have had a bunch of people clammoring for me to resurrect my first piece of freebie code, so I will be doing so ASAP.
Courtesy of my hereos, those guys who redefine bleeding edge, you can now add WMI to the Server Explorer in VS.NET 2003. Gosh, ANOTHER reason to switch??!? I dunno... <wincing> I think I should stick with 2002.
;-)
More Posts
Next page »