Найти зависимости проектов в стиле SDK - PullRequest
0 голосов
/ 20 сентября 2019

В расширении Visual Studio мне нужно перебрать все проекты в загруженном решении и найти все зависимости (как пакеты NuGet, так и сборки).Следующий код прекрасно работает для старых проектов не в стиле SDK, но не для новых проектов в стиле SDK.

var dte = ApplicationObject; // DTE object
if (dte == null || dte.Solution == null || !dte.Solution.IsOpen)
{
    return;
}

foreach (Project project in dte.Solution.Projects)
{
    var vsProj = project.Object as VSProject;
    if (vsProj == null || vsProj.References == null)
    {
        // Project not loaded
        continue;
    }

    foreach (Reference reference in vsProj.References)
    {
        if (reference.SourceProject != null 
            || reference.Type != prjReferenceType.prjReferenceTypeAssembly)
        {
            // Skip over non assembly references
            continue;
        }

        // reference.Name contains the reference name
    }
}

В новых проектах в стиле SDK «ссылки» теперь называются зависимостями, но в VSProject такого свойства нет.Так как же получить это для проектов в стиле SDK?

1 Ответ

1 голос
/ 27 сентября 2019

Так как же это получить для проектов в стиле SDK?

Боюсь, ответ отрицательный.Это может быть одной из проблем, связанных с VS2019 SDK и новой системой проектов SDK.

И эта проблема возникает именно в событии IVsSolutionEvents.OnAfterOpenSolution.Я пытался вызвать подобный код в событии OnQueryCloseSolution или в событии click Command Item, но все это хорошо работает для того же решения с one .net core приложениями в нем.

Я думаю, что это может быть одной проблемойпричина, по которой решение и проект не равны нулю (я вывожу xx.sln и xx.csproj), но он просто не может получить reference.Name из vsProj.References.И это работает, когда закрывается решение, но получается пустой список, когда открытое решение. На данный момент я не нашел действительного обходного пути, которое заставляет его работать.

О проблеме сообщили в DC, если кто-то заинтересован, вы можете отследить проблему здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...