Click here to Skip to main content
Click here to Skip to main content

ImmDoc .NET - a tool for generating HTML documentation

By , 27 Jun 2007
 

Introduction

Do you remember Visual Studio 2003 and its nice feature of generating HTML documentation for your projects? I bet many of you do and just like I do, you miss it now because unfortunately in Visual Studio 2005 it's no longer present.

Recently, I needed such functionality to document a .NET library I've been developing and just couldn't find the right tool to do the job. I'm aware of the existence of NDoc, but as far as I know it's quite dormant these days and it lacks support for .NET Framework 2.0. So I decided to spare some time to develop such a tool by myself, hoping that I would learn something new and that it'll be useful not only for me, but also for other programmers out there.

Below I put the list of topics that I had to broaden my knowledge on to complete the project, so you know what you can learn by analyzing the provided source code:

  • reflection mechanisms
  • subtleties of C# and MSIL
  • regular expressions
  • syntax of the XML comment files generated by the compiler
  • how to read XML files and programmatically validate them against a schema definition
  • embedded resources

Example

Before I give you more technical details about ImmDoc .NET, you may want to visit this page and see the example output generated by this tool. That is, documentation of three arbitrarily chosen assemblies from .NET Framework: System.Runtime.Remoting, System.Security and System.Transactions.

Usage

Currently, there's only command-line interface available for ImmDoc .NET. One of the reasons for this is the fact that creating GUI requires some time. However, thanks to this approach one can easily use the program from batch scripts or tools supporting the build process, such as NAnt.

The usage of ImmDoc .NET is pretty easy and straightforward. You can put all of your assemblies and XML comment files in one folder along with the ImmDoc .NET executable. Then run the program and, after some processing, you'll get a doc folder containing the generated documentation. You can also explicitly give the names of the files you want ImmDoc .NET to process and you can use a few options, which I list below:

  • -pn, -ProjectName:STRING - use this switch if you want to give your documentation project a meaningful name
  • -ex, -Exclude:FILE - if you don't explicitly give the file names, you can use this switch to exclude particular files from processing
  • -od, -OutputDirectory:DIR - use this switch to specify the name of the directory where you want to have your documentation generated
  • -fd, -ForceDelete - ImmDoc .NET will not delete the output directory if it already exists, unless you use this switch
  • -vl, -VerboseLevel:LEVEL - you can set various levels of verbosity, i.e. the greater the level is, the more output from the program you'll get; LEVEL can be from 0 (no output) to 3 (full output)

There is also a feature which needs explicit mention. Because it's not possible to put XML comments on namespaces and because you can document multiple assemblies together, ImmDoc .NET provides a way to add additional comments. To do this, you have to create an XML file with the .docs extension. The syntax of this file is very simple, but note that it'll be validated against a schema, namely AdditionalDocumentation.xsd, which you can find in the ZIP archive with the source code. After you've created such a file, all you have to do is put it in one folder with your assemblies and XML comment files that you want to process or just explicitly give its name as an argument to the program. Below is the example:

<?xml version="1.0" encoding="utf-8"?>
<summaries>
    <assembly name="SomeAssembly">
        <summary>
            Description of the assembly goes here.
        </summary>
        <namespace name="Some.Namespace">
            <summary>
                Description of the namespace goes here.
            </summary>
        </namespace>
        ...
    </assembly>
    ...
</summaries>

Project architecture and design

ImmDoc .NET comprises two assemblies that are merged at the end by the ILMerge tool, which is why there's only one EXE file. These are ImmDocNetLib, which actually does the whole job of analyzing assemblies and XML comment files, and ImmDocNet, which is a console application that uses ImmDocNetLib and provides the interface for the user.

As I've already said, ImmDocNetLib has two main responsibilities: analysis of given assemblies and generating the documentation. Let's have a closer look at the first task, which in principle involves using reflection to obtain detailed information about assemblies and the modules they contain.

You'll find the most important classes in the Imm.ImmDocNetLib.MyReflection.MetaClasses namespace. These classes are lightweight and more or less exact equivalents of classes from the System.Reflection namespace. Essentially, almost all of them inherit from the MetaClass class which, among other things, contains properties like Name, Summary and Remarks. Other classes add specific details concerning entities they represent, e.g.. MyMethodInfo holds information about return type and parameters. Such information is often represented in ImmDoc .NET by other classes that inherit from MetaClass like, for example, MyParameterInfo, MyFieldInfo, etc.

So in the first step of the processing, information obtained using ordinary reflection mechanisms is combined with comments extracted from XML comment files to form an internal representation of given assemblies. Below is the UML diagram, which will hopefully give you some overview of this representation. To avoid clutter, not all classes are included:

Internal structure

After collecting all of the needed information, it's finally time to start generating some documentation. Relevant classes are contained in the Imm.ImmDocNetLib.Documenters namespace. We have there a simple abstract class named Documenter, from which we can derive other classes responsible for generating documentation in whatever format we like. I've implemented the HTMLDocumenter class, which creates a set of HTML, CSS and JavaScript files. Together, these constitute a nice MSDN-like documentation of given assemblies.

HTMLDocumenter is a rather big class, so in order to reuse some functionality one would probably want to do some high-level refactoring before implementing one's own documenter. To give you a general overview of the responsibilities of HTMLDocumenter, I've created a simple UML diagram that lists example methods implemented by this class.

Documenters Namespace

Here are short descriptions of the above methods:

bool GenerateDocumentation(string outputDirectory, 
            DocumentationGenerationOptions options)

This initiates the process of generating documentation. It invokes such methods as PrepareOutputDirectory(), GenerateMainIndex(), ExtractStyleSheets(), ProcessAssemblies(), GenerateTableOfContents(), etc.

void CreateInvokableMembersOverloadsIndex
    (MyInvokableMembersOverloadsInfo myInvokableMembersOverloadsInfo, 
    MyClassInfo declaringType, string dirName)

This method creates an HTML page that will contain an index of all overloads of a particular method or constructor.

string CreateNamespaceMemberSyntaxString(MyClassInfo namespaceMember)

This method is responsible for creating a type declaration string. Such a string comprises, for example, a visibility modifier, base class, implemented interfaces, constraints on generic parameters, etc.

void ExtractBinaryResourceToFile(string resourceName, string fileName)

There are couple of graphics used in the generated pages. This method is used to extract a specified embedded resource to a physical file.

string ProcessComment(string contents)

This method processes every comment found in an XML file in order to replace such tags as <code>, <c>, <see> and so on with appropriate HTML tags.

void WriteIndexHeader(StreamWriter sw, string pageTitle, 
                string[] sectionsNamesAndIndices)

This method writes a common HTML header used by almost all generated pages.

string ResolveLink(MetaClass metaClass)

For the generated documentation to be usable, it is necessary to provide some navigation between pages. This method aids with the task of creating hyperlinks, for example, to the particular member of a class.

Summary

I hope that someone will find ImmDoc .NET useful; I know I do. I'm waiting for some feedback and if there is some interest I'll continue to develop this project. It still lacks some minor features and, after all, a user-friendly front-end would be a nice thing to have. So if you have some suggestions, questions or maybe you've found a bug I'd be more than glad to "hear" from you. My e-mail is: [admin at immortal dot pl]. You may also want to visit the ImmDoc .NET Homepage. This is the place where you'll most probably find the latest releases of the project and news concerning it.

History

  • 23 May, 2007 -- Original version posted
  • 21 June, 2007 -- Downloads updated
  • 27 June, 2007 -- Downloads updated

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Marek Stoj
Poland Poland
Member
I'm studying computer science at the University of Wroclaw in Poland. Currently I'm on a one-semester scholarship at the Dresden University of Technology (Computational Engineering program). Main areas of my interests are: game programming (mostly for mobile platforms), .NET, artificial intelligence (in particular natural language processing), software engineering (in particular object-oriented design and analysis, aspect-oriented programming and component-based software engineering).

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralNew home for ImmDoc.NETmemberMarek Stoj25 Jul '09 - 4:00 
ImmDoc.NET has a new home at http://immdocnet.codeplex.com[^]. You can find a new version there (1.0) which now uses Mono.Cecil to reflect on assemblies.
General.docs not working as documentmemberMember 442119016 Apr '09 - 4:22 
Quote: "... To do this, you have to create an XML file with the .docs extension. The syntax of this file is very simple, but note that it'll be validated against a schema, namely AdditionalDocumentation.xsd, which you can find in the ZIP archive with the source code. After you've created such a file, all you have to do is put it in one folder with your assemblies and XML comment files that you want to process or just explicitly give its name as an argument to the program. ..."
 
That's not how the code in the download packages is. Both the .exe and the src download only process "Summaries.docs" correctly, whenever you use a different name it fails. The code line generating this error is:
 
Program.cs, line 467:
 
xr = XmlReader.Create("Summaries.docs", xrs);
 
which should be:
 
xr = XmlReader.Create(fullFileName, xrs);
 
I recall using this in the past without any problems, but in that case I might have used a version
from the ImmDoc.Net homepage instead of this CodeProject one. Unfortunately, the ImmDoc.Net website seems offline ?
GeneralI really like this toolmemberspoodygoon30 Aug '08 - 2:14 
I really like this tool it's great for lazy developers who usually ummmmm kind of forget to document. Simple and to the point no excess bull, and the defaults are well thought out as well.
 
Thanks for a very useful tool.
GeneralVery very nice workmemberEdson Mattos8 Oct '07 - 17:05 
I was on google searching for a thing like this, and I like it very much!!!
 
Thanks!
QuestionSand castle?memberKinStephen27 Jun '07 - 6:57 
Why not just use Sand castle... this is the replacement for NDoc...
 
http://www.sandcastledocs.com/Wiki%20Pages/Home.aspx[^]
AnswerRe: Sand castle?memberLiam O'Hagan2 Aug '07 - 14:09 
I used the latest sandcastle version, and this tool on the same set of XML and exe files. This tool produced some nice documents (and even better now with the CHM output) while sandcastle coughed up some unintelligble crap.
 
I'll stick with this one for the moment...
 
I have no blog...

GeneralSucceeds in filling the vacuum created by Studio 2005 to NDOC SeriesmemberVasudevan Deepak Kumar26 Jun '07 - 2:43 
NDOC hit hiccups with Studio 2005 and hopefully now this one fills the vacuum. Good work! Smile | :)
 
Vasudevan Deepak Kumar
Personal Homepage
Tech Gossips

AnswerRe: Succeeds in filling the vacuum created by Studio 2005 to NDOC SeriesmemberThe Bug28 Jun '07 - 1:12 
Just take a look at the Sandcastle from Microsoft...
NewsInfo about new releasesmemberMarek Stoj26 Jun '07 - 2:08 
Apparently it takes some time to get the article updated, so to those of you who are interested I would recommend downloading the newest release directly from ImmDoc .NET homepage.
 
Marek Stój

GeneralAdded CHM supportmemberMarek Stoj25 Jun '07 - 6:05 
Today I've implemented support for generating CHM files. However to use this feature you need to have HTML Help Workshop installed. As of the time of writing this post, download links in this article haven't been updated but the new version can be downloaded from the ImmDoc .NET homepage.
 
Marek Stój

GeneralRe: Added CHM supportmemberVasudevan Deepak Kumar26 Jun '07 - 2:46 
Marek Stoj wrote:
Today I've implemented support for generating CHM files.

 
Good going. Good luck! Smile | :)
 
Vasudevan Deepak Kumar
Personal Homepage
Tech Gossips

QuestionWhat's wrong with Sandcastle?memberJoe Sonderegger24 Jun '07 - 19:43 
http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en[^]
 
This is exactly the same, and supported by Microsoft!
 
Have a nice life!!

AnswerRe: What's wrong with Sandcastle?memberKinStephen27 Jun '07 - 6:57 
Agreed
AnswerRe: What's wrong with Sandcastle?memberCSharper94 Jul '07 - 22:38 

Well I tried SandCastle and was impressed, but I think Doc-o-matic is probably the best. Out of all three/four with NDoc this tool is the simplest and works well (Great Job!!)
 
CSharper
QuestionComments are not written in docs...memberTonster10121 Jun '07 - 9:09 
I'm not sure how you got the comments in the sample documentation, but no matter what I try, the comments just do not make it in the output.
 
I've tried:
Explicitly including both the exe and xml comments
Implicitly let ImmDoc find all the files in the directory
Debugging through your code (only in program.cs, not deeper)to make sure the XML file was being picked up (WHICH IS WAS NOT AT
FIRST: I had to alter the check for valid file types to string.Lower() because sometime VS spits out .XML instead of .xml)

Is it just me that is unable to get the comments in the documentation from my code?
 
~Tony Y.

AnswerRe: Comments are not written in docs...memberMarek Stoj21 Jun '07 - 9:26 
Thanks for pointing out the bug - I missed the call to ToLower() in one place.
 
And about your problem - could you clarify whether only your comments are missing or the members are not even included in the output. This is important because only public types are included (or protected nested types).
 
If the case is that only your comments are missing you could send me some example project with which you have this problem and I'll try to figure out what's wrong. I haven't encountered such problems and nobody has reported it till now. Though I know that there's a non-zero number of users (excluding me) who tested ImmDoc and it worked fine for them :]
 
Best regards,
Marek Stój

GeneralRe: Comments are not written in docs...memberTonster10121 Jun '07 - 10:29 
Inside AssembliesInfo.ReadMyAssemblyInfoFromAssembly, seems it does not like missing dependencies, or better said types that have not yet been loaded from a dependent assembly.
 
Heres the stack trace:
at ctor() in MyMethodInfo.cs : 71
at AddMethod() in MyClassInfo.cs : 214
at AddMember() in MyClassInfo.cs : 559
at AddMembers() in MyClassInfo.cs : 80
at ctor() in MyClassInfo.cs : 65
at AddType() in MyNamespaceInfo.cs : 55
at ReadAssembly() in MyAssemblyInfo.cs : 90
at ReadMyAssemblyInfoFromAssembly() in AssembliesInfo.cs : 86
 
So if the first assembly read contains types that are declared in another assembly, which has not been loaded yet, then an exception occurs and I end up on line 92 of AssembliesInfo.cs file.
 
I'm not 100% sure that the order of assemblies loaded is the exact cause of the error, but ideally dependency exceptions should just be ignored and continue. Maybe not, but thats just my 2 cents.
 
~Tony Y.

GeneralRe: Comments are not written in docs...memberMarek Stoj21 Jun '07 - 13:04 
I suppose the order in which the assemblies are loaded shouldn't matter because it's not until they all have been examined that the program resolves dependencies between them, links etc. I guess the problem is in the Tools.GetHumanReadableForms() method (line 71 in the MyMethodInfo ctor) which is one of the more complex methods in the project and I would expect that it may be buggy :] It would be great if you could extract the relevant pieces of your code which cause the bug to manifest so I can fix it.
 
Best regards,
Marek Stój

GeneralRe: Comments are not written in docs...memberKeithSKTM26 Jun '07 - 0:34 
Hi, I'm getting the same issue using VS'05 SP1 and on a VB .Net application. Although I have added in summary information (using ''' in VB) in the code there is nothing displayed in the help files apart from "There is no summary".
 
Is this a VB thing?
 
Regards,
 
Keith
GeneralRe: Comments are not written in docs...memberMarek Stoj26 Jun '07 - 1:57 
Hi.
 
I did some testing and indeed there was a problem with VB. I think I fixed it and you can download updated version from the ImmDoc .NET homepage. It would be great if you give me some feedback whether your problem has been resolved.
 
Incidentally I discovered another issue with VB. It turned out that the XML comment files are generated differently depending on the compiler used (CS or VB). In particular, values of cref attributes are not expanded by VB compiler to full IDs so in general it is not possible to unambiguously resolve links. Unfortunately I can't do much about it as it's a reported bug to be resolved in future releases (http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=802863&SiteID=1).
 
Best regards,
Marek Stój

GeneralRe: Comments are not written in docs...memberKeithSKTM26 Jun '07 - 2:23 
Yep, that fixed it! Any chance I can get the same rapid response from our other software vendors?
 
Thanks Marek.
 
Keith
QuestionCHM output?memberbalazs_hideghety21 Jun '07 - 3:30 
Nice work. Does your tool support CHM file like output?
 
Advice:
- check out castle (it's still in development, so not really usable) - maybe you'll get some ideas for your tool
- former tool i used: nDoc - is free, check it's source - it generated also CHM's.

 
C#, ASPX, SQL, novice to NHibernate

AnswerRe: CHM output?memberMarek Stoj21 Jun '07 - 3:42 
Unfortunately there's no CHM support yet. I would like to have this feature by myself so it has quite high priority :] Nevertheless I don't have too much spare time recently (who does?), so it won't be implemented very soon.
 
Best regards,
Marek Stój
 
PS. Thanks for the kind words and the suggestions - I'll take a closer look at those project you mentioned.

GeneralFixed a little bug manifesting in IE 6.memberMarek Stoj21 Jun '07 - 2:56 
I've uploaded slightly modified version of the project with a fix which was inadvertently introduced in the 0.91 release and which manifested itself by incorrectly displaying generated pages in Internet Explorer 6.0.
 
-----
"Any fool can use a computer. Many do." -- Ted Nelson
GeneralSource code missingmemberTBermudez15 Jun '07 - 10:41 
The link to the source code is broken.
GeneralRe: Source code missingmemberMarek Stoj15 Jun '07 - 10:49 
Thanks. I've corrected both links. Sorry about that.
GeneralNew release.memberMarek Stoj15 Jun '07 - 7:36 
I've uploaded the new version of ImmDoc .NET (0.91).
 
Changes:
 
- added handling of tags,
- fixed displaying of exceptions in Exceptions sections.

GeneralIts Awesome man,memberSidhartha Shenoy29 May '07 - 18:38 
Congragulations dude. This is just amazing work. You got my complete 5. Its unfortunate that such articles can only be given 5.
 
sid here

GeneralNice workmemberqumer10124 May '07 - 5:50 
Hi
Nice work man. U deserve my 5 Wink | ;)
GeneralI was just wondering...memberGeorgi Atanasov24 May '07 - 0:48 
Hello,
 
Thank you for the nice, useful and easy-to-read article - you got my 5!
 
I was wondering though why User-Interface articles (like this one http://www.codeproject.com/cs/miscctrl/The_New_RibbonMenuButton.asp[^]) have higher rating than this one. In my opinion one could learn much more things from this here and the task accomplished is much more difficult than playing around with GDI+ (I do not want to belittle the efforts of the other author at all).
 
Who knows, may be I am wrong...
 
Thanks,
Georgi

GeneralRe: I was just wondering...memberMarek Stoj24 May '07 - 2:17 
No problem, I'm glad you liked it Smile | :)
 
And about the ratings. I think that the difficulty level of the presented material is not that important. I could imagine someone publishing an article treating some very sophisticated topics but unless it's written clearly and in an easy-to-follow way, it won't be received well. Moreover I would say that the most important factor which determines the popularity is the general usefulness of the presented techniques, code, etc and as long they possess this characteristic, the difficulty level won't matter.

 
Immortal
GeneralRe: I was just wondering...memberPaul Selormey24 May '07 - 2:18 
GUI is an artistic work not many us do very well, no matter your programming level, and time consuming.
 
In my opinion, this is the reason the GUI work attract high marks. You realize that most of the MS Office upgrades is for the GUI, since many hardly use the all features in Office 2000 Wink | ;)
 
Best regards,
Paul.
 
Jesus Christ is LOVE! Please tell somebody.

Generalvery good and practical tool!memberKamil Piekarz23 May '07 - 23:56 
you've got my 5.
Miło widzieć kogoś Polski piszącego tu artykuły Smile | :)
 
Kamil
GeneralRe: very good and practical tool!memberMarek Stoj24 May '07 - 1:40 
Dzieki :]
 
Immortal
GeneralExcellent great workmemberPrashant Danda23 May '07 - 16:10 
I did not know that NDOC was not compatible with VS2005, but with so many upgrades in VS2005 it is really strange to know that microsoft has not come up with any addon to provide code documentation generation.
 
ImmDoc.Net looks really impressive and am sure it will be very helpful to many dot net developers out there.
 
http://dotnetfx3.blogspot.com
GeneralRe: Excellent great workmemberPaul Selormey23 May '07 - 17:43 
Prashant Danda wrote:
...strange to know that microsoft has not come up with any addon to provide code documentation generation.

 
What is really strange is that you are missing in action Poke tongue | ;-P , there is Sandcastle. Try the following...
 
SandcastleBuilder[^]
 
Sandcastle[^]
 
Best regards,
Paul.
 

 
Jesus Christ is LOVE! Please tell somebody.

GeneralRe: Excellent great workmemberPrashant Danda23 May '07 - 19:27 
thanks paul looks like there are lot of other implementations too like this one,
Ghost Doc http://www.roland-weigelt.de/ghostdoc/[^]
 
But as you said better to go with sandcastle as it is from code plex Big Grin | :-D
http://www.codeplex.com/SHFB[^]
GeneralRe: Excellent great work [modified]memberWcohen29 May '07 - 10:49 
Ghost Doc serves a different purpose than nDoc/SandCastle/... It generates Xml comments based on the names of properties/classes/...
 
You can use Ghost Doc in combination with Sandcastle/nDoc/... other
 
Greetz,
Cohen
 
52M
GeneralRe: Excellent great workmemberMarek Stoj24 May '07 - 1:43 
Yeah. It'll be hard to compete with Sandcastle Smile | :) But I did find out about it after I've already been finishing the development of ImmDoc .NET and for me it's not a wasted time - at least I've learned something new.

 
Immortal
GeneralRe: Excellent great workmemberPaul Selormey24 May '07 - 2:21 
Marek Stoj wrote:
It'll be hard to compete with Sandcastle

 
I do not see it. I hope to do so myself, when I find the time. I do not believe Sandcastle will meet all my documentation requirements, so continue your work. The NDoc guy also quit giving Sandcastle as one of the reasons, he missed a great opportunity.
 
Best regards,
Paul.
 
Jesus Christ is LOVE! Please tell somebody.

GeneralRe: Excellent great workmemberthund3rstruck24 May '07 - 3:58 
"I did not know that NDOC was not compatible with VS2005"
 
I've been using NDoc with VS2005 (XP & Vista) for more than a year now and it works great for me.

 
Download NDoc (compatible with .NET v2.0)[^]
GeneralRe: Excellent great workmemberMarek Stoj24 May '07 - 9:00 
I was curious about this version of NDoc, so I've downloaded it, made a simple test and I have to say that the results are more than unsatisfactory. Below is the list of some constructs that this version of NDoc can't handle:
  • nested generic declarations like Dictionary<string, List<int>>,
  • nullable types,
  • more complex array declarations like [][,,,][][],
  • comments for type parameters (<typeparam> tags),
  • comments (summaries, parameters, etc) for more complex declarations like the first overload of DoSomething() method shown in the snippet below,
  • references to more complex generic types or members (using <see> tags).
 
Below I'm putting the code snippet which I used in my test. You can see the output from NDoc here and the output from ImmDoc .NET here.
 
I'd like you to note that I don't want to argue with anyone or prove that my project is better (in fact I've found some bugs in my implementation during this test Smile | :) ). I just want to point out that saying this version of NDoc supports .NET 2.0 is a little exaggeration. I'd rather say that it's capable of not crashing when dealing with .NET 2.0 assemblies :]
 
using System;
using System.Collections.Generic;
 
namespace Imm.GenericsTest
{
    /// <summary>
    /// Some funny generic class <br />
    /// See <see cref="DoSomething{T, V}">the funny method.</see>
    /// </summary>
    /// <example>
    /// <para>This is an example:</para>
    /// <code>
    /// public virtual void DoSomething(int a)
    /// {
    ///     int b = a + 1;
    /// }
    /// </code>
    /// </example>
    /// <typeparam name="T">Some type param named T.</typeparam>
    /// <typeparam name="U">Some type param named U.</typeparam>
    public class GenericClass<T, U> : Dictionary<List<T>, Dictionary<string[], List<U?[,][][]>>>
        where T : class, IEnumerable<List<U>>, new()
        where U : struct
    {
        /// <summary>
        /// Some funny method.
        /// </summary>
        /// <typeparam name="T">Type param named T.</typeparam>
        /// <typeparam name="V">Type param named V.</typeparam>
        /// <param name="param1">Some param 1.</param>
        /// <param name="param2">Some param 2</param>
        /// <exception cref="MyException{T}">When anything goes wrong.</exception>
        /// <returns>Nothing.</returns>
        public List<U?>[][][,,] DoSomething<T, V>(V[] param1, Dictionary<string, List<U?>> param2)
        {
            return null;
        }
 
        /// <summary>
        /// Some overload of funny method.
        /// </summary>
        /// <param name="a">Some param a.</param>
        /// <exception cref="MyException{T}">When anything goes wrong.</exception>
        /// <typeparam name="T">Type param named T.</typeparam>
        /// <typeparam name="V">Type param named V.</typeparam>
        public void DoSomething<T, V>(int a)
        {
        }
    }
 
    public class MyException<T> : Exception
    {
    }
}

 
Best regards,
Immortal
GeneralRe: Excellent great workmemberKoru.nl26 May '07 - 18:48 
Hi,
 
Nice read.
 
As far as I know the la(te)st version of NDoc 2.0 (Alpha) can be downloaded from http://www.kynosarges.de/NDoc.html[^]. It is somewhat newer than the one you have been using in your test. And yes, there are still some issues left, but the result is certainly better than what was outputted by the older version of NDoc.
 
Regards,

 
Jan.

GeneralGood Start...memberPaul Selormey23 May '07 - 14:31 
I have being planning something similar before Sandcastle was released by MS.
The sample page does not work in IE 7, I viewed it Firefox and it works nicely.
 
Best regards,
Paul.
 
Jesus Christ is LOVE! Please tell somebody.

GeneralRe: Good Start...memberMarek Stoj23 May '07 - 20:58 
I've modified the example and it should display correctly in IE7 now. Strange thing by the way - locally everything was fine (I put some effort so that generated documentation displays fine in IE6, IE7, Firefox and Opera), but after uploading on the remote server IE7 got confused by the copyright notice which was between doctype and html tags. When I placed it inside the head tag the page suddenly started to display just fine.
 
Immortal

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130523.1 | Last Updated 27 Jun 2007
Article Copyright 2007 by Marek Stoj
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid