2013-01-02 37 views
2

我在使用非托管visual C++和少量C#的项目上工作。我们正试图想出一种方法来记录我们的项目,既有API参考,也有一些额外的概念性文档。理想情况下,所有文档都可以共存在.chm文件中,我们可以将其与我们的产品一起分发。Sandcastle,/ doc和Unmanaged C++

作为一个很长时间的C++开发人员,我已经很熟悉Doxygen。有人建议我也看看沙堡,但我遇到了一些困难。

从其他许多来源,包括本网站上的其他文章,众所周知sandcastle不支持非托管C++。我确实发现了一篇文章,似乎表明您仍然可以将C++文档塞进sandcastle中,方法是将API参考添加为概念性主题。

使用Visual Studio 2010,您可以打开项目设置中的/ doc选项以用于非托管C++项目。这会产生.XDC文件,然后这个工作室将编译成一个与你的lib/dll/exe一起的.xml文件。我被卡住的地方是不清楚你能用这个XML文件做什么。我在网上找到的一些网页建议您可以使用此文件进行智能感知,但我从未在非托管C++中看到过这种工作。我希望我能够在Sandcastle Help File Builder中以某种方式使用这个.xml文件,但我找不到任何关于如何在线完成的例子,并且我对SHFB所做的每一次尝试都失败了。它似乎只想要MAML或HTML文件,如果我想添加一个现有的概念性帮助文件。

所以我的问题:

  1. 有没有办法让我的/ DOC产生的.xml文件到我SHFB帮助解决?
  2. 如果不是,非托管C++的/ doc选项有什么意义?
  3. 在我的/ doc生成的.xml文件中生成可以通过SHFB导入的HTML或MAML的文件时,是否可以进行某种转换?

这个工作,或者我应该回到Doxygen?

回答

2

理论上,Sandcastle可以用来记录非托管代码,但它需要一个工具来生成当前由托管代码程序集MRefBuilder.exe工具生成的等效反射数据文件。到目前为止,根据我的了解,没有人做到这一点。

因为我不再使用它,所以我无法评论缺乏对unmanged C++的智能感知。猜测,假设使用相同的编译器,但有一些额外的命令行选项,/ doc可能是托管代码输出的代码。

使用XSL将XML注释转换为MAML是一种可能性,但同样,这是一个我不知道任何人追求的选项。我的猜测是,大多数选择在这种情况下使用Doxygen,因为它是一个既定的解决方案。

埃里克

1

我也有类似的情况。我需要在我的C++/CLI绑定中使用XML文档,以便.NET代码可以使用Intellisense查看它们。但仅供参考,Visual Studio 2010中不支持XML文档中的本机代码:

https://msdn.microsoft.com/en-us/library/ms177226(v=vs.100).aspx

Visual Studio 2010中
在Visual C++中,你可以添加XML 文档(三斜杠)评论到您的源代码并指示 编译器将它们输出到.xml文件。然后该文件可以是 输入到一个为 代码中的类创建文档的进程。 此版本的Visual C++ IDE不支持Intellisense中的XML 注释。

这种限制是在Visual Studio 2013年。但是去掉,它仍然是一个恼人的生态系统,如果您在本机代码使用模板(如Boost库)工作:

在当前版本代码注释不会在模板或包含模板类型的任何东西(例如,以参数为模板的函数)上处理。添加这些注释将导致未定义的行为。

,我发现你的问题,同时寻找一种方式来与#pragma#define包括这些库时暂时禁用XML解析器评论。