2009-06-24 2 views
43

Я работаю над проектом, в котором библиотека C++/cli используется в основном из приложения C#.Документирование кода библиотеки C++/CLI для использования с C# - лучшие инструменты и методы?

Есть ли способ сделать комментарии кода в C++/cli видимыми для C# intellisence в visual studio?

Предполагая, что нет, что было бы лучшим способом документировать код C++/cli, чтобы облегчить его использование из C# (и внутри C++/cli, конечно)? Что вы думаете о комментариях XML против doxygen vs других инструментов (которые)?

ответ

48

Я получил его на работу следующим образом:

  1. Используйте комментарии стиля XML для записей заголовков C++/CLI. Это означает, что требуется полный комментарий XML (комментарии с тройной слэшкой, отметка <summary> как минимум)

  2. Убедитесь, что включена опция компилятора C++ Generate XML Documentation Files. Это должно сгенерировать XML-файл с документацией с тем же именем, что и ваша сборка (MyDll.xml).

  3. Убедитесь, что проект C# ссылается на вашу сборку MyDll.dll где MyDll.xml также присутствует в той же папке. Когда вы наведите указатель мыши на ссылку из сборки, MS Visual Studio загрузит документацию.

Это работало для меня в Visual Studio 2008 на сборке, построенной для .NET 3.5.

+0

Да, уловка заключается в том, чтобы скопировать XML (а также PDB, если вы хотите отлаживать), рядом с dll, на которую вы ссылаетесь. Это будет работать и на VS2005. –

+3

Работает также в Visual Studio 2010. Единственное различие заключается в том, что в файлах xml есть расширение «.xdc» – user502144

+0

Довольно много упреков на этом - последовали рекомендации (подтвержденный файл 'xml' присутствует и существуют комментарии, однако intellisense не показывает комментарии. Это в VS2017. –

2

Интересно. Попробовав несколько методов, он выглядит как intellisense между управляемым проектом C++ и C# не работает.

Следующий пример даст вам правильное IntelliSense в среде 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 supports reading XML documentation, который в основном идентичен стандартной документации XML для C#. Она имеет тенденцию добавлять дополнительные строки только для тегов отверстия и закрытий, но гораздо более удобным для чтения, на мой взгляд, чем следующей альтернативе 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() 
*/ 
0

Вы правы. Это не работает. Сборка C++ добавит свою информацию IntelliSense в главный файл .ncb, и вы получите автозаполнение имен методов и т. Д. Однако вы правы в том, что не сможете получить «комментарий» о каждом методе и т. Д. .

0

Возможно, у вас будет большая ценность, если взглянуть на Doxygen. А потом посмотреть Doxygen.NET - что-то мы писали для собственного использования, который строит «Объект иерархий» из XML-файлов выходов из Doxygen ...

2

DocXml имеет большое преимущество в поддержке VS (синтаксическая раскраска, intellisense, автоматический экспорт в файлы XML). Инструменты Doxygen могут читать формат DocXml, поэтому вы также можете использовать их в этом формате.

Чтобы помочь вам аккумулировать аккуратные и точные комментарии к Doc с минимальными усилиями, вы можете проверить мой аддон AtomineerUtils. Это занимает большую часть работы по созданию и обновлению комментариев DocXml, Doxygen, JavaDoc или Qt и поддерживает C, C++, C++/CLI, C#, Java, JavaScript, TypeScript, JScript, UnrealScript, PHP и код Visual Basic.