2009-06-24 30 views
43

Tôi đang làm việc trên một dự án có thư viện C++/cli đang được sử dụng chủ yếu từ một ứng dụng C#.Tài liệu mã thư viện C++/CLI để sử dụng từ C# - các công cụ và phương pháp hay nhất?

Có cách nào để làm cho các nhận xét mã trong C++/cli hiển thị với C# intellisence trong studio trực quan không?

Giả sử không có, cách tốt nhất để ghi lại mã C++/cli để cho phép sử dụng dễ dàng hơn từ C# (và trong C++/cli tất nhiên) là gì? Ý kiến ​​của bạn về ý kiến ​​XML vs doxygen so với các công cụ khác (trong đó) là gì?

Trả lời

48

tôi đã nhận nó làm việc như sau:

  1. Sử dụng nhận xét kiểu XML cho các mục nhập tiêu đề C++/CLI của bạn. Điều này có nghĩa là cần có chú thích XML đầy đủ (các chú thích ba dấu gạch chéo, <summary> thẻ ở mức tối thiểu)

  2. Đảm bảo rằng tùy chọn trình biên dịch C++ Generate XML Documentation Files được bật. Điều này sẽ tạo ra một tệp XML với tài liệu có cùng tên với assembly của bạn (MyDll.xml).

  3. Đảm bảo rằng dự án C# tham chiếu đến tệp MyDll.dll của bạn trong đó MyDll.xml cũng có trong cùng một thư mục. Khi bạn di chuột qua một tham chiếu từ assembly, MS Visual Studio sẽ tải tài liệu.

Điều này làm việc cho tôi trong Visual Studio 2008 trên một assembly được xây dựng cho .NET 3.5.

+0

Vâng, mẹo là sao chép XML (và cũng PDB nếu bạn muốn gỡ lỗi) cùng với dll bạn đang tham chiếu. Điều này sẽ làm việc trong VS2005 quá. –

+3

Hoạt động trong Visual Studio 2010. Sự khác biệt duy nhất là các tập tin xml có phần mở rộng ".xdc" – user502144

+0

Khá nhiều upvotes về điều này - Theo đề xuất của bạn (xác nhận 'xml' tập tin là hiện tại và ý kiến ​​tồn tại, tuy nhiên intellisense không hiển thị ý kiến.Đây là trong VS2017. –

2

Thú vị. Sau khi thử một vài phương thức, nó trông giống như phần intelliSense giữa một dự án Managed C++ và C# không hoạt động.

Ví dụ sau đây sẽ cung cấp cho bạn IntelliSense thích hợp trong môi trường C++, nơi nó được công bố, nhưng tham khảo các đối tượng trong C# cho thấy không có gì:

// Gets the value of my ID for the object, which is always 14. 
public: virtual property int MyId 
{ 
    int get() { return 14; } 
} 

comments XML không làm việc một trong hai. Tôi đoán rằng đây là lỗi hoặc yêu cầu thứ gì đó mà tôi không thể hiểu được. Đánh giá từ việc thiếu câu trả lời cho câu hỏi này, có lẽ là một lỗi.

Theo như tạo tài liệu, tôi khuyên bạn nên đi đường dẫn của tài liệu XML. Doxygen supports reading XML documentation hầu như giống với tài liệu XML chuẩn cho C#. Nó có xu hướng thêm dòng bổ sung chỉ cho mở khóa và đóng cửa, nhưng có thể đọc được nhiều hơn trong quan điểm của tôi hơn so với doxygen sau:

//! 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

Bạn nói đúng. Nó không hoạt động. Xây dựng C++ sẽ thêm thông tin IntelliSense của nó vào tệp .ncb chính và bạn sẽ nhận được tự động hoàn thành tên phương thức, v.v. Tuy nhiên, bạn chính xác trong đó bạn sẽ không thể nhận được mô tả "nhận xét" về từng phương pháp, v.v.

0

Có thể bạn sẽ có rất nhiều giá trị khi xem xét Doxygen. Và sau đó nhìn lên Doxygen.NET - đó là điều mà chúng tôi đã viết để sử dụng riêng của chúng tôi mà xây dựng "Object tầng nấc" từ kết quả đầu ra tập tin XML từ Doxygen ...

2

DocXml có lợi thế chính khi được hỗ trợ bởi VS (màu cú pháp, intellisense, xuất tự động sang tệp XML). Các công cụ Doxygen có thể đọc định dạng DocXml để bạn vẫn có thể sử dụng chúng với định dạng này.

Để giúp bạn tạo các nhận xét Doc gọn gàng và chính xác với nỗ lực tối thiểu, bạn có thể muốn xem phần bổ trợ của tôi AtomineerUtils. Điều này đòi hỏi hầu hết công việc trong việc tạo và cập nhật các nhận xét định dạng DocXml, Doxygen, JavaDoc hoặc Qt, và nó hỗ trợ C, C++, C++/CLI, C#, Java, JavaScript, TypeScript, JScript, UnrealScript, PHP và mã Visual Basic.

Các vấn đề liên quan