{"id":1238,"date":"2012-03-23T12:02:05","date_gmt":"2012-03-23T10:02:05","guid":{"rendered":"http:\/\/mariusbancila.ro\/blog\/?p=1238"},"modified":"2015-09-21T16:45:06","modified_gmt":"2015-09-21T14:45:06","slug":"docproject-tips-and-tricks","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/","title":{"rendered":"DocProject Tips and Tricks"},"content":{"rendered":"<p><a href=\"http:\/\/docproject.codeplex.com\/\">DocProject<\/a> with <a href=\"http:\/\/sandcastle.codeplex.com\/\">Sandcastle<\/a> are a great choice for creating MSDN-style documentation. You can author conceptual documentation using MAML (Microsoft Assistance Markup Language) and reference documentation from managed assemblies and XML comments. Here is the <a href=\"http:\/\/docproject.codeplex.com\/documentation\">documentation for DocProject<\/a>. Writing conceptual documentation I ran into some problems that were not straight forward to solve. Hopefully these tips will help you if you have the same problems.<\/p>\n<p><strong>Overloaded Methods<\/strong><br \/>\nThe <tt>codeEntityReference<\/tt> tag allows you to link to API reference documentation (namespaces, types, methods, properties, fields). You have to prefix the fully qualified name of the entity with <strong>N:<\/strong> for namespaces, <strong>T:<\/strong> for types, <strong>P:<\/strong> for properties, <strong>F:<\/strong> for fields and <strong>M:<\/strong> for methods. What if you have overloaded methods and you want to link to the page that displays all of them, not one particular method? The <strong>O:<\/strong> prefix Visual Studio is expecting (for XML comments) does not work. <a href=\"http:\/\/shfb.codeplex.com\/\">Sandcastle Help File Builder<\/a> (SHFB) expects <strong>Overload:<\/strong> instead.<\/p>\n<pre name=\"code\" class=\"csharp\">\r\n  &lt;codeEntityReference&gt;Overload:YourNamespace.YourClass.YouOverloadedMethod&lt;\/codeEntityReference&gt;\r\n<\/pre>\n<p><strong>Methods with arguments<\/strong><br \/>\nIf you want to link to API reference documentation for a method that take some parameters you must specify those parameter&#8217;s type in parenthesis.<\/p>\n<pre name=\"code\" class=\"csharp\">\r\n  &lt;codeEntityReference&gt;M:YourNamespace.YourClass.Function(System.String)&lt;\/codeEntityReference&gt;\r\n<\/pre>\n<p>However, if the method takes more than one parameter, you must separate the argument types with a comma and <em>use no whitespaces between them<\/em>. If you have whitespaces the API reference will not be resolved.<\/p>\n<pre name=\"code\" class=\"csharp\">\r\n  &lt;codeEntityReference&gt;M:YourNamespace.YourClass.Function(System.String,System.Int32[])&lt;\/codeEntityReference&gt;\r\n<\/pre>\n<p><strong>Constructors<\/strong><br \/>\nConstructors are special methods so you must use a special notation for them: instead of using their name use the <strong>#ctor<\/strong> tag.<\/p>\n<pre name=\"code\" class=\"csharp\">\r\n  &lt;codeEntityReference&gt;M:YourNamespace.YourClass.#ctor&lt;\/codeEntityReference&gt;\r\n<\/pre>\n<p>Of course, if the constructor has some arguments you must specify them in parenthesis:<\/p>\n<pre name=\"code\" class=\"csharp\">\r\n  &lt;codeEntityReference&gt;M:YourNamespace.YourClass.#ctor(System.String)&lt;\/codeEntityReference&gt;\r\n<\/pre>\n<p><strong>Generics<\/strong><br \/>\nWhen it comes to generics you must use the special notation with &#96; (grave accent). The grave accent (&#96;) indicates the level and the number after it is the number of the generic types. Here are the rules (as indicated in the <a href=\"http:\/\/en.csharp-online.net\/ECMA-334%3A_E.3.1_ID_string_format\">ECMA specification<\/a> ):<\/p>\n<ul>\n<li>Arguments that define generic type parameters have an appended grave accent character followed by the number of type parameters (ex. T&#96;1)<\/li>\n<li>For nested types, the number is based upon the of new type parameters on the nested type(ex. T&#96;1.Nested&#96;2)<\/li>\n<li>Arguments that refer to generic type parameters on types are encoded using a single grave accent character (`) followed by the zero-based index of the type parameter.<\/li>\n<li>Arguments that use generic parameters on methods use double grave accent characters (&#96;&#96;) followed by the zero-based index of the type-parameter instead of the single grave accent used for parameters on types.<\/li>\n<\/ul>\n<p>For instance, let&#8217;s say your class looks like this:<\/p>\n<pre name=\"code\" class=\"csharp\">\r\nnamespace foo\r\n{\r\n   class bar&lt;T&gt;\r\n   {\r\n   }\r\n}\r\n<\/pre>\n<p>If you want to link to the generic bar type you must do it like this:<\/p>\n<pre name=\"code\" class=\"csharp\">\r\n  &lt;codeEntityReference&gt;T:foo.bar`1&lt;\/codeEntityReference&gt;\r\n<\/pre>\n<p>What if you had a generic method too?<\/p>\n<pre name=\"code\" class=\"csharp\">\r\nnamespace foo\r\n{\r\n   class bar&lt;T&gt;\r\n   {\r\n      public TR func1&lt;TR&gt;(string s)\r\n      {\r\n         return (default)TR; \/\/ just something dummy\r\n      }\r\n\r\n      public TR func2&lt;TR&gt;(string s, TR arg)\r\n      {\r\n         return (default)TR; \/\/ just something dummy\r\n      }\r\n\r\n      public void func3&lt;T1, T2&gt;(T a, T1 b, T2 c)\r\n      {\r\n      }\r\n   }\r\n}\r\n<\/pre>\n<p>Then you must refer to the function as follows:<\/p>\n<pre name=\"code\" class=\"csharp\">\r\n  \/\/ function is generic, but no generic argument is used\r\n  &lt;codeEntityReference&gt;M:foo.bar`1.func1``1(System.String)&lt;\/codeEntityReference&gt;\r\n\r\n  \/\/ function is generic and has a generic argument on the method => use `` + 0-based index of type\r\n  &lt;codeEntityReference&gt;M:foo.bar`1.func2``1(System.String,``0)&lt;\/codeEntityReference&gt;\r\n\r\n  \/\/ function is generic and has generic arguments on type and on the method\r\n  \/\/ first argument type comes from the type => `0\r\n  \/\/ second and third argument types come from the method, in the order they were declared => ``0 and ``1\r\n  &lt;codeEntityReference&gt;M:foo.bar`1.func3``1(`0,``0,``1)&lt;\/codeEntityReference&gt;\r\n<\/pre>\n<p><strong>API Reference Documentation<\/strong><br \/>\nWhen you author documentation you probably want to put together conceptual documentation and API reference documentation. The later you build from external sources, i.e. assemblies and XML files with the XML-comments you wrote in the source code. Question is where and how do you insert this API reference? The answer was not very easy to find; luckily a colleague of mine was able to help me with the answer. <\/p>\n<p>First of all, there is only one place in the hierarchy of your topics hierarchy where you can insert it. So no matter from how many sources you build this, it all goes into one place. To set the place you must edit the <strong>topics.xml<\/strong> file (under Help\\Settings). This file looks like this (of course, this is a dummy sample):<\/p>\n<pre name=\"code\" class=\"xml\">\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;topics&gt;\r\n  &lt;topic id=\"cec0ab12-05b5-4a00-ab8a-391d67625997\" file=\"topic1.aml\"&gt;\r\n    &lt;topic id=\"854aeed0-510e-4ca1-b2bb-12104ba9eada\" file=\"topic1\\topic11.aml\"&gt;\r\n  &lt;\/topic&gt;\r\n&lt;\/topics&gt;\r\n<\/pre>\n<p>There is a special tag you can insert as a child of a topic. It&#8217;s called <strong>stoc<\/strong> and looks like this:<\/p>\n<pre name=\"code\" class=\"xml\">\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;topics&gt;\r\n  &lt;topic id=\"cec0ab12-05b5-4a00-ab8a-391d67625997\" file=\"topic1.aml\"&gt;\r\n    &lt;stoc project=\"Project\" \/&gt;\r\n  &lt;\/topic&gt;\r\n&lt;\/topics&gt;\r\n<\/pre>\n<p>This will tell the builder to insert under topic1 all the API reference documentation.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DocProject with Sandcastle are a great choice for creating MSDN-style documentation. You can author conceptual documentation using MAML (Microsoft Assistance Markup Language) and reference documentation from managed assemblies and XML comments. Here is the documentation for DocProject. Writing conceptual documentation I ran into some problems that were not straight forward to solve. Hopefully these tips &#8230; <a title=\"DocProject Tips and Tricks\" class=\"read-more\" href=\"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/\" aria-label=\"Read more about DocProject Tips and Tricks\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[308,38],"tags":[310,309,311,312,313],"class_list":["post-1238","post","type-post","status-publish","format-standard","hentry","category-documentation","category-tutorials","tag-docproject","tag-documentation-2","tag-sandcastle","tag-shfb","tag-tips"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<meta name=\"keywords\" content=\"documentation,docproject,sandcastle,shfb,tips,overload,generics,constructor\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"DocProject Tips and Tricks\" \/>\n\t\t<meta property=\"og:description\" content=\"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2012-03-23T10:02:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2015-09-21T14:45:06+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"DocProject Tips and Tricks\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#article\",\"name\":\"DocProject Tips and Tricks\",\"headline\":\"DocProject Tips and Tricks\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"datePublished\":\"2012-03-23T12:02:05+02:00\",\"dateModified\":\"2015-09-21T16:45:06+02:00\",\"inLanguage\":\"en-US\",\"commentCount\":2,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#webpage\"},\"articleSection\":\"Documentation, Tutorials, docproject, documentation, sandcastle, shfb, tips\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/documentation\\\/#listItem\",\"name\":\"Documentation\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/documentation\\\/#listItem\",\"position\":4,\"name\":\"Documentation\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/documentation\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#listItem\",\"name\":\"DocProject Tips and Tricks\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#listItem\",\"position\":5,\"name\":\"DocProject Tips and Tricks\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/documentation\\\/#listItem\",\"name\":\"Documentation\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/\",\"name\":\"DocProject Tips and Tricks\",\"description\":\"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/03\\\/23\\\/docproject-tips-and-tricks\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2012-03-23T12:02:05+02:00\",\"dateModified\":\"2015-09-21T16:45:06+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"DocProject Tips and Tricks","description":"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle.","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/","robots":"max-image-preview:large","keywords":"documentation,docproject,sandcastle,shfb,tips,overload,generics,constructor","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#article","name":"DocProject Tips and Tricks","headline":"DocProject Tips and Tricks","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"datePublished":"2012-03-23T12:02:05+02:00","dateModified":"2015-09-21T16:45:06+02:00","inLanguage":"en-US","commentCount":2,"mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#webpage"},"articleSection":"Documentation, Tutorials, docproject, documentation, sandcastle, shfb, tips"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/documentation\/#listItem","name":"Documentation"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/documentation\/#listItem","position":4,"name":"Documentation","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/documentation\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#listItem","name":"DocProject Tips and Tricks"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#listItem","position":5,"name":"DocProject Tips and Tricks","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/documentation\/#listItem","name":"Documentation"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/","name":"DocProject Tips and Tricks","description":"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2012-03-23T12:02:05+02:00","dateModified":"2015-09-21T16:45:06+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"DocProject Tips and Tricks","og:description":"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle.","og:url":"https:\/\/mariusbancila.ro\/blog\/2012\/03\/23\/docproject-tips-and-tricks\/","article:published_time":"2012-03-23T10:02:05+00:00","article:modified_time":"2015-09-21T14:45:06+00:00","twitter:card":"summary","twitter:title":"DocProject Tips and Tricks","twitter:description":"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle."},"aioseo_meta_data":{"post_id":"1238","title":"DocProject Tips and Tricks","description":"Tips and tricks for authoring conceptual documentation with DocProject and Sandcastle.","keywords":[{"label":"documentation","value":"documentation"},{"label":"docproject","value":"docproject"},{"label":"sandcastle","value":"sandcastle"},{"label":"shfb","value":"shfb"},{"label":"tips","value":"tips"},{"label":"overload","value":"overload"},{"label":"generics","value":"generics"},{"label":"constructor","value":"constructor"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:13:02","updated":"2025-12-12 07:37:23","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":2,"uagb_excerpt":"DocProject with Sandcastle are a great choice for creating MSDN-style documentation. You can author conceptual documentation using MAML (Microsoft Assistance Markup Language) and reference documentation from managed assemblies and XML comments. Here is the documentation for DocProject. Writing conceptual documentation I ran into some problems that were not straight forward to solve. Hopefully these tips&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/documentation\/\" class=\"advgb-post-tax-term\">Documentation<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/articles_and_tutorials\/tutorials\/\" class=\"advgb-post-tax-term\">Tutorials<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Documentation<\/span>","<span class=\"advgb-post-tax-term\">Tutorials<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/articles_and_tutorials\/tutorials\/\" class=\"advgb-post-tax-term\">docproject<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/articles_and_tutorials\/tutorials\/\" class=\"advgb-post-tax-term\">documentation<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/articles_and_tutorials\/tutorials\/\" class=\"advgb-post-tax-term\">sandcastle<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/articles_and_tutorials\/tutorials\/\" class=\"advgb-post-tax-term\">shfb<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/articles_and_tutorials\/tutorials\/\" class=\"advgb-post-tax-term\">tips<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">docproject<\/span>","<span class=\"advgb-post-tax-term\">documentation<\/span>","<span class=\"advgb-post-tax-term\">sandcastle<\/span>","<span class=\"advgb-post-tax-term\">shfb<\/span>","<span class=\"advgb-post-tax-term\">tips<\/span>"]}},"comment_count":"2","relative_dates":{"created":"Posted 15 years ago","modified":"Updated 11 years ago"},"absolute_dates":{"created":"Posted on March 23, 2012","modified":"Updated on September 21, 2015"},"absolute_dates_time":{"created":"Posted on March 23, 2012 12:02 pm","modified":"Updated on September 21, 2015 4:45 pm"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-jY","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=1238"}],"version-history":[{"count":27,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1238\/revisions"}],"predecessor-version":[{"id":2188,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1238\/revisions\/2188"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=1238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=1238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=1238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}