При использовании комментариев к документации XML в C # для создания документации .XML-файла в VS2010 SP1 я заметил, что не работает должным образом в одном конкретном случае : для COM-импортированных членов интерфейса (методы и свойства).
Давайте возьмем этот файл C #, взяв в качестве примера некоторые типы из Первичной сборки взаимодействия MS Word (которая, как мне кажется, широко известна большинству людей):
using Microsoft.Office.Interop.Word;
namespace TestProject
{
/// <summary>
/// Documentation test class. This documentation references a COM interface: <see cref="_Document"/>
/// and a method in that interface: <see cref="_Document.Activate"/>, as well as a property
/// <see cref="_Document.ActiveTheme"/>.
/// </summary>
public class DocumentedClass
{
}
}
Полученный файл документации .XML содержит следующее:
<member name="T:TestProject.DocumentedClass">
<summary>
Documentation test class. This documentation references a COM interface: <see cref="T:Microsoft.Office.Interop.Word._Document"/>
and a method in that interface: <see cref="!:_Document.Activate"/>, as well as a property
<see cref="!:_Document.ActiveTheme"/>.
</summary>
</member>
Если вы внимательно посмотрите на сгенерированный фрагмент XML-файла, вы увидите, что ссылка на интерфейс COM разрешена (T:Microsoft.Office.Interop.Word._Document
), но не разрешается для элементов интерфейса (например, !:_Document.Activate
).
Я попытался полностью квалифицировать элементы интерфейса в комментариях к документации следующим образом, но результат тот же:
namespace TestProject
{
/// <summary>
/// Documentation test class. This documentation references
/// a COM interface: <see cref="Microsoft.Office.Interop.Word._Document"/>
/// and a method in that interface: <see cref="Microsoft.Office.Interop.Word._Document.Activate"/>,
/// as well as a property: <see cref="Microsoft.Office.Interop.Word._Document.ActiveTheme"/>.
/// </summary>
public class DocumentedClass2
{
}
}
Теперь, что странно, это то, что это работает для COM-импортированных членов класса , например, эта документация:
using Microsoft.Office.Interop.Word;
namespace TestProject
{
/// <summary>
/// Now, let's reference a COM class <see cref="ParagraphFormatClass"/> and its member property
/// <see cref="ParagraphFormatClass.Alignment"/>.
/// </summary>
public class DocumentedClass3
{
}
}
приводит к tон следует следующему фрагменту файла документации XML:
<member name="T:TestProject.DocumentedClass3">
<summary>
Now, let's reference a COM class <see cref="T:Microsoft.Office.Interop.Word.ParagraphFormatClass"/> and its member
<see cref="P:Microsoft.Office.Interop.Word.ParagraphFormatClass.Alignment"/>.
</summary>
</member>
, который совершенно допустим, поскольку свойство класса COM правильно разрешено в P:Microsoft.Office.Interop.Word.ParagraphFormatClass.Alignment
.
Это действительно происходит только для интерфейсов, импортированных из COM, обычнона элементы интерфейса правильно ссылаются в итоговой документации XML-файлов.Не имеет значения, импортируется ли COM-интерфейс из PIA или вы сами импортируете библиотеку типов через tlbimp.exe.
У меня такой вопрос: есть ли причина для такого поведения или это ошибка??Что можно сделать, чтобы правильно импортировать элементы интерфейса, импортированные из COM, в сгенерированных файлах документации XML?