Existe uma ferramenta para encontrar funções não referenciadas (código morto e obsoleto) em um aplicativo C#?[fechado]

StackOverflow https://stackoverflow.com/questions/65585

  •  09-06-2019
  •  | 
  •  

Pergunta

Quero excluir foo() se foo() não for chamado de lugar nenhum.

Foi útil?

Solução

Gendarme detectará métodos privados sem chamadores upstream.Está disponível em várias plataformas e a versão mais recente lida com "EviteUncalledPrivateCodeRule".

FxCop detectará métodos públicos/protegidos sem chamadores upstream.No entanto, o FxCop não detecta todos os métodos sem chamadores upstream, pois se destina a verificar se o seu código faz parte de uma biblioteca, portanto, os membros públicos são deixados de fora. Você pode usar o NDepend para fazer uma pesquisa por membros públicos sem chamadores upstream, que detalho aqui nesta outra resposta do StackOverflow.

(editar:adicionou informações sobre o Gendarme, que realmente faz o que o questionador perguntou)

Outras dicas

NDepend também reportará sobre código potencialmente não utilizado.

Tenha em mente que o Resharper (e provavelmente outras ferramentas semelhantes também) não destacará métodos não utilizados se os métodos estiverem marcados public.Não há como uma ferramenta de análise de código estático verificar se os métodos do seu assembly são usados ​​por outros assemblies fora da sua solução.Portanto, o primeiro passo para eliminar métodos não utilizados é reduzir a sua visibilidade para private ou internal.

Sim o Ferramentas MZ addin tem um recurso de revisão de código morto.

Reafiador faz isso, e não apenas com métodos.Ele também faz isso usando instruções, variáveis, etc.

A ferramenta NDepend pode ajudar a encontrar código não utilizado em uma base de código .NET. Isenção de responsabilidade:Eu sou um dos desenvolvedores desta ferramenta.

NDepend propõe escrever Regra de código sobre consulta LINQ (CQLinq).Em volta 200 regras de código padrão são propostas, sendo 3 delas dedicadas a código não utilizado/morto detecção:

O NDepend está integrado no Visual Studio, portanto essas regras podem ser verificado/navegado/editado diretamente dentro do IDE.A ferramenta também pode ser integrada ao seu processo de CI e pode construir relatórios que mostrará as regras violadas e os elementos de código culpados.

Se você clicar nesses 3 links para o código fonte dessas regras, verá que aqueles relativos a tipos e métodos são um pouco complexos.Isso ocorre porque eles detectam não apenas tipos e métodos não utilizados, mas também tipos e métodos usados apenas por tipos e métodos mortos não utilizados (recursivos).

Isso é análise estática, daí o prefixo Potencialmente nos nomes das regras.Se um elemento de código for usado apenas através da reflexão, estas regras podem considerá-lo como não utilizado, o que não é o caso.

Além de usar essas três regras, aconselho medir a cobertura do código por meio de testes e se esforçar para ter uma cobertura completa.Freqüentemente, você verá que o código que não pode ser coberto por testes, na verdade é não utilizado/morto código que pode ser descartado com segurança.Isto é especialmente útil em algoritmos complexos onde não está claro se uma ramificação do código é acessível ou não.

Bem, se o VS não faz isso nativamente, um método simples é clicar com o botão direito no método e selecionar "encontrar todas as referências" .Se houver apenas uma referência (onde é declarada), provavelmente ela não será usada em nenhum outro lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top