Gráfico de dependência de projetos do Visual Studio

130

Atualmente, estou migrando uma grande solução (~ 70 projetos) do VS 2005 + .NET 2.0 para o VS 2008 + .NET 3.5. Atualmente, tenho o VS 2008 + .NET 2.0.

O problema é que eu preciso mover os projetos um a um para a nova estrutura .NET, garantindo que nenhum projeto .NET 2.0 faça referência ao projeto .NET 3.5. Existe alguma ferramenta que me dê um bom gráfico das dependências do projeto?

Migol
fonte

Respostas:

39

Você já experimentou o NDepend? Ele mostra as dependências e você também pode analisar a usabilidade de suas classes e métodos.

O site deles:

http://ndepend.com


Para concluir a resposta da @Eriawan em abril de 2020, a versão 2020.1 do NDepend foi lançada com o Gráfico de Dependência completamente reconstruído. Agora, ele se baseia em grandes soluções feitas de centenas de projetos e oferece muitas facilidades de navegação.

Aqui está o que parece no projeto NopCommerce OSS .

Gráfico de dependência do NDepend no NopCommerce

Aqui está o que parece em toda a biblioteca de classes do .NET Core 3 (176 assemblies).

insira a descrição do link aqui

Disclaimer: Eu trabalho na NDepend

Eriawan Kusumawardhono
fonte
3
O pôster original não disse que o ndepend estava livre e resolve o problema.
Krystan honra
6
Pode ter sido gratuito no momento em que escrevemos esta resposta, mas agora não é.
Levente Koncz 07/01
@ patrick-from-ndepend-team, não edite diretamente minha resposta e abra uma nova resposta.
Eriawan Kusumawardhono 29/04
Ok @EriawanKusumawardhono desculpe se for um problema para você. Dessa forma, os leitores esclarecem mais detalhes e melhoram a utilidade da resposta. Deseja remover os detalhes e as capturas de tela extras?
Patrick da equipe NDepend
@PatrickfromNDependteam os detalhes extras e as capturas de tela estão OK. mas como essa é originalmente a minha resposta, parece que sua edição me faz parecer um trabalho no NDepend. Adicione uma nova resposta à sua edição e também enfatize que sua nova resposta é uma adição à minha resposta. Obrigado antes :)
Eriawan Kusumawardhono 16/06
169

Eu precisava de algo semelhante, mas não queria pagar (ou instalar) uma ferramenta para fazer isso. Eu criei um script PowerShell rápida que atravessa as referências do projeto e cospe-los para fora em um yuml.me -friendly formato em vez disso:

Function Get-ProjectReferences ($rootFolder)
{
    $projectFiles = Get-ChildItem $rootFolder -Filter *.csproj -Recurse
    $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

    $projectFiles | ForEach-Object {
        $projectFile = $_ | Select-Object -ExpandProperty FullName
        $projectName = $_ | Select-Object -ExpandProperty BaseName
        $projectXml = [xml](Get-Content $projectFile)

        $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"

        $projectReferences | ForEach-Object {
            "[" + $projectName + "] -> [" + $_ + "]"
        }
    }
}

Get-ProjectReferences "C:\Users\DanTup\Documents\MyProject" | Out-File "C:\Users\DanTup\Documents\MyProject\References.txt"
Danny Tuppeny
fonte
4
impressionante. Peguei isso e o estendi para passar por todos os subprojetos, depois estendi novamente para pegar um arquivo sln em vez de mapear todo o projeto. Obrigado
Jon
Com quais versões do Visual Studio isso funciona? Além disso, para visualizar o C ++ em vez de projetos do C #, basta alterar o sufixo do arquivo .csproj para .vcproj? Trabalhando com VS 2005 aqui e eu recebo um arquivo de resultado vazio ...
SSC
1
Foi escrito contra um projeto de 2010 para C #, mas você provavelmente poderia ajustá-lo muito facilmente, olhando para o XML dentro de um projeto C ++ e ajustando o código :-)
Danny Tuppeny
5
código @ssc Há levemente atualizada colocado no meu blog que pode ser mais fácil de ajustar: blog.dantup.com/2012/05/...
Danny Tuppeny
5
Se você estiver usando o Powershell 2.0, precisará anexar =$trueos parâmetros MandatoryeValueFromPipeline
MoMo
79

Atualização: ReSharper desde a versão 8 possui o recurso interno 'Exibir dependências do projeto' .

A versão ReSharper <8 possui o recurso Interno para mostrar gráficos de dependência no uso do visualizador yFiles. Consulte o manual rápido na parte inferior da postagem.

insira a descrição da imagem aqui

Como

  1. Instale a ferramenta yEd a partir daqui .
  2. Execute o VS com o argumento de linha de comando /resharper.internal.
  3. Vá para ReSharper / Internal / Show Dependencies.
  4. Especifique os projetos que você deseja incluir na "imagem geral".
  5. Desmarque a opção 'Excluir nós de terminal ...', a menos que você precise.
  6. Pressione 'Mostrar'.
  7. Usar layout hierárquico em anos (Alt + Shift + H)
  8. Enviar feedback =)
Shkredov S.
fonte
2
Também ReSharper> Inspecionar> Projeto Hierarquia para obter a lista dos projetos que fazem referência no atual
Lu55
5
Resharper> Arquitetura> 'Mostrar diagrama de dependência do projeto'
Dr Blowhard 4/16
32

Você pode obter facilmente um gráfico de dependência do projeto usando o Visual Studio 2010 Ultimate. Digitalize para 5 minutos neste vídeo para ver como: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

No Visual Studio 2010 Ultimate: Arquitetura | Gerar gráfico de dependência | Por montagem.

Chris Lovett
fonte
@CJohnson Você pode fazer isso nos códigos C e C ++ se tiver o Visual Studio 2010 Feature Pack 2 . Veja também Como gerar dependência Gráficos para C e C ++ Código
Esther Fan - MSFT
1
Tentei, lançou uma exceção. Aparentemente, a MS nunca a testou com nada além de alguns projetos. Absolutamente inútil na minha opinião.
C Johnson
1
Não é só isso, é terrivelmente lento também. Eu faria isso -10 se pudesse. Eu escrevi meu próprio walker de dependência de projeto (para o nosso próprio sistema de compilação) e foi extremamente rápido em comparação com o visual studio.
C Johnson
@CJohnson Concordo que é lento e propenso a lançar exceções para grandes soluções, mas ainda é melhor do que nada. Consegui fazê-lo fechando todos os aplicativos, interrompendo alguns serviços e reiniciando o Visual Studio.
precisa saber é o seguinte
Grandes soluções para mim são cerca de 600 projetos com milhões de linhas de código. Nenhuma chance de interromper alguns serviços é uma solução aceitável para mim.
C Johnson
19

Eu escrevi uma ferramenta que pode ajudá-lo. O VS Solution Dependency Visualizer analisa as dependências do projeto em uma solução e cria um gráfico de dependência a partir dessas informações, bem como um relatório de texto.

devio
fonte
Com quais versões do Visual Studio e com que tipo de projetos isso funciona? VS 2005 / C ++ para cá e a ferramenta não parece fazer nada ...
SSC
definitivamente funciona com vs 2008/2010 e .csproj / .vbproj. não fez teste com vs2005, mas atualmente .vcproj arquivos não são reconhecidos
devio
Isso só o arquivo mostra ferramenta solução após analisá-lo :-( Não meus cerca de 300 projectos..
thersch
@thersch se você quiser que eu dê uma olhada, zip .sln e arquivos de projeto (para que a estrutura de diretórios original seja preservada), carregue-a em um compartilhamento de arquivos e entre em contato comigo através do meu blog. thx
devio 3/08/17
9

Eu tive um problema semelhante, mas era ainda mais complicado porque vários projetos faziam referência a versões diferentes do mesmo assembly.

Para obter uma saída que inclui informações de versão e verifica possíveis problemas de carregamento de assembly em tempo de execução, criei esta ferramenta:

https://github.com/smpickett/DependencyViewer

(link direto para a versão do github: https://github.com/smpickett/DependencyViewer/releases )

Pickett
fonte
1
Nice tool! Simples e eficiente. Obrigado por isso! +1 de mim.
Buka
Realmente ótima ferramenta! Eu sonhei com algo assim por anos. Muito obrigado por compartilhar!
Alehro 17/10
8

Você pode criar um gráfico de dependência de seus projetos no VS 2010 Ultimate. O Architecture Explorer permite procurar sua solução, selecionar projetos e os relacionamentos que você deseja visualizar e criar um gráfico de dependência a partir da sua seleção.

Para mais informações, consulte os seguintes tópicos:

Como gerar documentos de gráfico a partir do código : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Como localizar código usando o Architecture Explorer : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

Download do RC : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a .

Fórum de Ferramentas de Modelagem e Descoberta Arquitetural do Visual Studio 2010 : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads

Esther Fan - MSFT
fonte
VS 2012 Professional também? Ou apenas o VS 2012 Ultimate?
precisa saber é o seguinte
@Kiquenet Você pode criar gráficos de dependência no VS 2012 Ultimate. Você pode abrir e fazer alterações limitadas no Premium e Pro.
Esther Fan - MSFT
5

Para concluir a resposta do eriawan nos gráficos gerados pelo NDepend, veja as sessões de tela abaixo. Você pode baixar e usar a edição de avaliação gratuita do NDepend por um tempo.

Mais sobre o gráfico de dependência do NDepend insira a descrição da imagem aqui

Mais sobre a matriz de dependência do NDepend : insira a descrição da imagem aqui

Isenção de responsabilidade: faço parte da equipe de ferramentas

Patrick da equipe NDepend
fonte
NDepend é para .NET, a sua CppDepend clone é para C ++ e trabalha com .vcxproj arquivos
Patrick de NDepend equipa
5

A solução Powershell é a melhor. Eu o adaptei em um script bash que funciona na minha máquina (TM):

#!/bin/bash

for i in `find . -type f -iname "*.csproj"`; do
    # get only filename
    project=`basename $i`

    # remove csproj extension
    project=${project%.csproj}

    references=`cat $i | grep '<ProjectReference' | cut -d "\"" -f 2`
    for ref in $references; do
        # keep only filename (assume Windows paths)
        ref=${ref##*\\}

        # remove csproj extension
        ref=${ref%.csproj}

        echo "[ $project ] -> [ $ref ]"
    done

done
Nikolaos Georgiou
fonte
3

Se você simplesmente deseja um gráfico de dependência, descobri que esta é uma das maneiras mais limpas de obter um:

Analisador de Dependências

Kieran Benton
fonte
3

O VS 2019 renomeou o módulo de gráfico de dependência para Code Map

aqui está a documentação oficial: https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2019

Steven J
fonte
"Para criar e editar mapas de código, você precisa da edição do Visual Studio Enterprise. Nas edições Visual Studio Community e Professional, você pode abrir diagramas que foram gerados na edição Enterprise, mas não pode editá-los."
MatthewT 25/07
1

Esta versão estendida do Script PS de Danny Tuppeny mostra as referências de projeto e externas:

Function Get-ProjectReferences($rootPath)
{
  $projectFiles = Get-ChildItem $rootPath -Filter *.csproj -Recurse
  $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

  $projectFiles | ForEach-Object {
    $projectFile = $_ | Select-Object -ExpandProperty FullName
    $projectName = $_ | Select-Object -ExpandProperty BaseName
    $projectXml = [xml](Get-Content $projectFile)

    $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"
    $projectReferences | ForEach-Object {
        "PR:[" + $projectName + "]:[" + $_ + "]"
    }
  }

  $projectFiles | ForEach-Object {
    $projectFile = $_ | Select-Object -ExpandProperty FullName
    $projectName = $_ | Select-Object -ExpandProperty BaseName
    $projectXml = [xml](Get-Content $projectFile)

    $externalReferences = $projectXml | Select-Xml '//defaultNamespace:Reference/@Include' -Namespace $ns
    $externalReferences | ForEach-Object {
        "ER:[" + $projectName + "]:[" + $_ + "]"
    }

  }

}

Get-ProjectReferences "C:\projects" | Out-File "C:\temp\References.txt"

Ele fornecerá um arquivo separado por dois pontos que pode ser aberto e analisado no Excel.

Svein Terje Gaup
fonte
-1

Eu verifiquei todas as respostas, mas nenhuma das opções me satisfazia, então escrevi minha própria ferramenta para visualizar dependências entre projetos.

https://github.com/Audionysos/VSProjectReferencesViewer

É estágio inicial, mas funcionou para as minhas necessidades :)

Paweł Audionysos
fonte