我正在从事一个项目,其中一个c++/cli库主要被一个c#应用程序使用。
有没有办法让c++/cli中的代码注释在Visual Studio中对c# IntelliSense可见?
假设没有,那么记录c++/cli代码以便更容易地从c#中使用(当然还包括在c++/cli中),最好的方法是什么?你认为XML注释与doxygen及其他工具(哪些)相比哪个更好?
我正在从事一个项目,其中一个c++/cli库主要被一个c#应用程序使用。
有没有办法让c++/cli中的代码注释在Visual Studio中对c# IntelliSense可见?
假设没有,那么记录c++/cli代码以便更容易地从c#中使用(当然还包括在c++/cli中),最好的方法是什么?你认为XML注释与doxygen及其他工具(哪些)相比哪个更好?
我已将其工作方式归纳如下:
在你的 C++/CLI 头文件条目中使用 XML 风格注释。这意味着必须提供完整的 XML 注释(三斜杠注释,最少需要 <summary>
标签)。
确保 C++ 编译器选项 生成 XML 文档文件 是开启的。这应该会生成一个与程序集同名的文档 XML 文件 (MyDll.xml)。
确保 C# 项目引用你的 MyDll.dll 程序集,而 MyDll.xml 文件也在同一文件夹中。当你鼠标悬停在程序集的引用上时, MS Visual Studio 将加载文档。
对于我来说,这在使用 .NET 3.5 构建的 Visual Studio 2008 中奏效。
DocXml的主要优点是得到VS的支持(语法高亮,智能感知,自动导出XML文件)。Doxygen工具可以读取DocXml格式,所以您仍然可以使用这种格式。
为了帮助您以最少的努力生成整洁准确的文档注释,您可以查看我的插件AtomineerUtils。它可以轻松创建和更新DocXml、Doxygen、JavaDoc或Qt格式的注释,并且支持C、C++、C++/CLI、C#、Java、JavaScript、TypeScript、JScript、UnrealScript、PHP和Visual Basic代码。
有趣。尝试了几种方法后,看起来在托管 C++ 项目和 C# 之间的智能感知不起作用。
以下示例将为您提供在声明它的 C++ 环境中正确的智能感知,但在 C# 中引用该对象时不显示任何内容:
// Gets the value of my ID for the object, which is always 14.
public: virtual property int MyId
{
int get() { return 14; }
}
XML注释也不起作用。我猜这可能是一个错误,或者需要一些我无法理解的东西。从这个问题缺乏答案来看,可能是一个错误。
至于文档生成,我建议使用XML文档路径。Doxygen支持读取XML文档,这与C#标准XML文档大致相同。它往往会添加额外的行来打开和关闭标签,但在我看来比以下doxygen替代方案更易读:
//! A normal member taking two arguments and returning an integer value.
/*!
\param a an integer argument.
\param s a constant character pointer.
\return The test results
\sa Test(), ~Test(), testMeToo() and publicVar()
*/
你可能会从Doxygen中获得很多价值。然后再查找一下Doxygen.NET——这是我们为自己编写的东西,它可以从Doxygen的XML文件输出中构建“对象层次结构”...
你说得对。它不起作用。C++构建将其IntelliSense信息添加到主.ncb文件中,您将获得方法名称的自动完成等。但是,您是正确的,您将无法获取有关每种方法的“注释”描述等。
xml
文件存在且包含注释,但是Intellisense不显示注释)。这发生在VS2017中。 - Aaron Hudon