Existem maneiras automáticas de sincronizar comentários entre uma interface e sua implementação? No momento, estou documentando os dois e não gostaria de mantê-los sincronizados manualmente.
ATUALIZAR:
Considere este código:
interface IFoo{
/// <summary>
/// Commenting DoThis method
/// </summary>
void DoThis();
}
class Foo : IFoo {
public void DoThis();
}
Quando eu crio uma classe assim:
IFoo foo=new Foo();
foo.DoThis();//comments are shown in intellisense
Aqui os comentários não são mostrados:
Foo foo=new Foo();
foo.DoThis();//comments are not shown in intellisense
A <inheritDoc/>
tag irá gerar perfeitamente a documentação no Sand Castle, mas não funciona nas dicas de ferramentas do Intellisense.
Por favor, compartilhe suas idéias.
Obrigado.
c#
documentation
xml-documentation
Valentin Vasilyev
fonte
fonte
<inheritdoc/>
está quebrado no Visual Studio. VoteRespostas:
Você pode fazer isso facilmente usando a
inheritdoc
tag Microsoft Sandcastle (ou NDoc) . Não é oficialmente suportado pela especificação, mas as tags personalizadas são perfeitamente aceitáveis e, de fato, a Microsoft optou por copiar isso (e uma ou duas outras tags) do NDoc quando criou o Sandcastle.Aqui está a página de ajuda da GUI do Construtor de Arquivos de Ajuda do Sandcastle, que descreve seu uso por completo.
(Claro, isso não é especificamente "sincronização", como sua pergunta menciona, mas parece ser exatamente o que você está procurando, no entanto.)
Como observação, essa ideia parece perfeitamente justa para mim, embora tenha observado que algumas pessoas acham que você sempre deve especificar novamente os comentários em classes derivadas e implementadas. (Na verdade, eu mesmo fiz isso ao documentar uma de minhas bibliotecas e não vejo nenhum problema.) Quase sempre não há razão para os comentários serem diferentes, então por que não apenas herdar e fazer da maneira mais fácil?
Edit: Em relação à sua atualização, o Sandcastle também pode cuidar disso para você. O Sandcastle pode produzir uma versão modificada do arquivo XML real que usa para entrada, o que significa que você pode distribuir essa versão modificada junto com sua biblioteca DLL em vez daquela construída diretamente pelo Visual Studio, o que significa que você tem os comentários no intellisense, bem como o arquivo de documentação (CHM, qualquer que seja).
fonte
<inheritdoc/>
não herda a documentação da<param>
tag.Se você ainda não estiver usando, eu recomendo fortemente um complemento gratuito do Visual Studio chamado GhostDoc . Facilita o processo de documentação. Dê uma olhada no meu comentário sobre uma questão um tanto relacionada.
Embora o GhostDoc não faça a sincronização automaticamente, ele pode ajudá-lo no seguinte cenário:
Você tem um método de interface documentado. Implemente essa interface em uma classe, pressione a tecla de atalho GhostDoc
Ctrl-Shift-D
, e o comentário XML da interface será adicionado ao método implementado.Vá para Opções -> Configurações do teclado e atribua uma tecla a
GhostDoc.AddIn.RebuildDocumentation
(eu useiCtrl-Shift-Alt-D
).Agora, se você alterar o comentário XML na interface , basta pressionar esta tecla de atalho no método implementado, e a documentação será atualizada. Infelizmente, isso não funciona vice-versa.
fonte
Normalmente escrevo comentários como este:
Os métodos são usados apenas pela interface, portanto, esse comentário nem mesmo é mostrado nas dicas de ferramentas durante a codificação.
Editar:
Se você quiser ver os documentos ao chamar a classe diretamente e não usando a interface, precisará escrevê-los duas vezes ou usar uma ferramenta como o GhostDoc.
fonte
Experimente o GhostDoc ! Funciona para mim :-)
Edit: Agora que fui informado do apoio do Sandcastle para
<inheritdoc/>
, endosso o post de Noldorin. É uma solução muito melhor. Ainda assim, recomendo o GhostDoc de maneira geral.fonte
Tenho uma resposta melhor: FiXml . , Eu sou um de seus autores
A clonagem de certamente funciona, mas tem desvantagens significativas, por exemplo:
Como foi mencionado, existe
<inheritdoc>
tag no Sandcastle , mas tem poucas desvantagens em comparação com FiXml:.xml
arquivos contendo comentários XML extraídos (por fim, isso não pode ser feito "em tempo real" durante a compilação).<see ... copy="true" />
.Veja a
<inheritdoc>
descrição do Sandcastle para mais detalhes.Breve descrição do FiXml: é um pós-processador de documentação XML produzido por C # \ Visual Basic .Net. Ele é implementado como uma tarefa MSBuild, portanto, é muito fácil integrá-lo a qualquer projeto. Ele aborda alguns casos irritantes relacionados à escrita de documentação XML nestas linguagens:
<see cref="Instance" />
propriedade para obter a única instância dele.”, Ou mesmo “Inicializa uma nova instância de<CurrentType>
classe”.Para resolver os problemas mencionados, as seguintes tags XML adicionais são fornecidas:
<inheritdoc />, <inherited />
Tag<see cref="..." copy="..." />
atributo na<see/>
tag.Aqui está sua página da web e página de download .
fonte
Leia aqui
Usa isto
fonte
Eu construí uma biblioteca para pós-processar os arquivos de documentação XML para adicionar suporte para a tag <inheritdoc />.
Embora não ajude com o Intellisense no código-fonte, permite que os arquivos de documentação XML modificados sejam incluídos em um pacote NuGet e, portanto, funciona com o Intellisense em pacotes NuGet referenciados.
Mais informações em www.inheritdoc.io (versão gratuita disponível).
fonte
Não faça isso. Pense desta forma - se ambos os comentários devem ser iguais o tempo todo, então um deles não é necessário. Deve haver um motivo para o comentário (além de algum tipo de obrigação estranha de bloquear comentários em todas as funções e variáveis), então você precisa descobrir qual é esse motivo único e documentá-lo.
fonte
Com o ReSharper você pode copiá-lo, mas não acho que ele esteja sincronizado o tempo todo.
fonte