You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
3.0 KiB
60 lines
3.0 KiB
<html> |
|
<head><title>NRefactory - XML Documentation</title></head> |
|
<body> |
|
<h1>NRefactory - XML Documentation</h1> |
|
<h2>Providing documentation for the type system</h2> |
|
<p> |
|
When using CecilLoader, set the <code>CecilLoader.DocumentationProvider</code> |
|
property to provide documentation for the loaded assemblies. |
|
The <code>XmlDocumentationProvider</code> class is an <code>IDocumentationProvider</code> implementation |
|
that can be used to read documentation from an external .xml file in the format generated by |
|
Microsoft's C# compiler. |
|
</p> |
|
<p> |
|
When parsing C# code, the <code>TypeSystemConvertVisitor</code> will load the documentation |
|
from the XML comments by default. (this can be disabled using the <code>SkipXmlDocumentation</code> property). |
|
</p> |
|
<p> |
|
Internally, the type system does not store XML documentation - instead, the documentation is |
|
requested from the provider whenever the <code>IEntity.Documentation</code> |
|
property is accessed.<br/> |
|
For this purpose, the type system casts the parsed file to <code>IUnresolvedDocumentationProvider</code> |
|
and tries to get the documentation. |
|
This way, the <code>CSharpParsedFile</code> can provide the documentation from the XML comments.<br/> |
|
If this fails, the type system casts the unresolved assembly/project content to <code>IDocumentationProvider</code>. |
|
This is the way the request for documentation gets to the <code>CecilLoader</code>, |
|
which in turn forwards it to the user-provided <code>IDocumentationProvider</code>. |
|
</p> |
|
<h2>cref</h2> |
|
<p> |
|
The syntax taken by the <code>cref</code> attribute depends on the documentation source. |
|
For example, C# XML comments may use "<code>List{T}</code> if the appropriate <code>using</code> exists, |
|
but .xml documentation files have to use the full ID string <code>T:System.Collections.Generics.List`1</code>. |
|
</p> |
|
<p> |
|
For this reason, the <code>IEntity.Documentation</code> property returns a <code>DocumentationComment</code> |
|
object that provides not only the XML text, but also a method that can be used to resolve <code>cref</code> |
|
attributes. |
|
</p> |
|
<p> |
|
Internally, the .xml file support uses the <code>IDStringProvider</code>; |
|
whereas C# has its own small <code>CSharpCrefParser</code>. |
|
</p> |
|
<h2>XmlDocumentationProvider implementation notes</h2> |
|
<p> |
|
The <code>XmlDocumentationProvider</code> is designed to load large amounts |
|
of documentation while using up only little memory. |
|
</p> |
|
<p> |
|
When a new <code>XmlDocumentationProvider</code> is created, it will read the .xml file and |
|
create a small in-memory index (using only 8 bytes per member). |
|
When documentation is requested from the provider, it uses this index to find the correct |
|
position in the .xml file, and parses only the interesting document fragment, not the whole file. |
|
</p> |
|
<p> |
|
The <code>XmlDocumentationProvider</code> is serializable and will be included when serializing a Cecil-loaded |
|
<code>IUnresolvedAssembly</code>. This way, an IDE like SharpDevelop can completely avoid parsing |
|
the .xml documentation file when the user opens a solution (except for the first time). |
|
</p> |
|
</body> |
|
</html>
|
|
|