记录 C++/CLI 库代码以供从 C# 使用 - 最佳工具和实践?

51

我正在从事一个项目,其中一个c++/cli库主要被一个c#应用程序使用。

有没有办法让c++/cli中的代码注释在Visual Studio中对c# IntelliSense可见?

假设没有,那么记录c++/cli代码以便更容易地从c#中使用(当然还包括在c++/cli中),最好的方法是什么?你认为XML注释与doxygen及其他工具(哪些)相比哪个更好?

5个回答

57

我已将其工作方式归纳如下:

  1. 在你的 C++/CLI 头文件条目中使用 XML 风格注释。这意味着必须提供完整的 XML 注释(三斜杠注释,最少需要 <summary> 标签)。

  2. 确保 C++ 编译器选项 生成 XML 文档文件 是开启的。这应该会生成一个与程序集同名的文档 XML 文件 (MyDll.xml)。

  3. 确保 C# 项目引用你的 MyDll.dll 程序集,而 MyDll.xml 文件也在同一文件夹中。当你鼠标悬停在程序集的引用上时, MS Visual Studio 将加载文档。

对于我来说,这在使用 .NET 3.5 构建的 Visual Studio 2008 中奏效。


是的,诀窍在于将XML(如果您想要调试,则还需PDB)与您正在引用的dll一起复制。这也适用于VS2005。 - Jason Williams
3
在Visual Studio 2010中也可以使用。唯一的区别是xml文件的扩展名为“.xdc”。 - fdermishin
1
这条信息获得了相当多的赞 - 我们按照您的建议操作(确认xml文件存在且包含注释,但是Intellisense不显示注释)。这发生在VS2017中。 - Aaron Hudon
有关VS2015-2017使用.NET 4+的任何新信息吗?因为对于2008-2012年来说,答案完全正确,但3.5早已被弃用... - Ruslan Makrenko
1
这对我在使用VS2019时有效。 - dOxxx
在VS2019/.Net Framework 4.5中运行得非常好,谢谢! - n0ne

2

DocXml的主要优点是得到VS的支持(语法高亮,智能感知,自动导出XML文件)。Doxygen工具可以读取DocXml格式,所以您仍然可以使用这种格式。

为了帮助您以最少的努力生成整洁准确的文档注释,您可以查看我的插件AtomineerUtils。它可以轻松创建和更新DocXml、Doxygen、JavaDoc或Qt格式的注释,并且支持C、C++、C++/CLI、C#、Java、JavaScript、TypeScript、JScript、UnrealScript、PHP和Visual Basic代码。


1

有趣。尝试了几种方法后,看起来在托管 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()
*/

1

你可能会从Doxygen中获得很多价值。然后再查找一下Doxygen.NET——这是我们为自己编写的东西,它可以从Doxygen的XML文件输出中构建“对象层次结构”...


0

你说得对。它不起作用。C++构建将其IntelliSense信息添加到主.ncb文件中,您将获得方法名称的自动完成等。但是,您是正确的,您将无法获取有关每种方法的“注释”描述等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接