Странные ошибки диагностики, предопределенный тип System ... не определен или не импортирован - PullRequest
0 голосов
/ 18 сентября 2018

Я получаю ошибки диагностики Roslyn при анализе очень простого приложения .NET 4.6.Файлы решения можно загрузить оттуда https://github.com/dotnet/roslyn/files/2393288/DemoSolution.zip

Дерево зависимостей выглядит следующим образом:

BLL -> DB

Я получаю следующие ошибки диагностики в BLLпроект:

enter image description here

Решение и проекты строятся нормально, но Рослин выдает эти ошибки.Может быть, ошибки вводят в заблуждение, и мне нужно каким-то образом настроить проекты?Любая идея, как я могу решить эти ошибки?

Вот код, используемый для анализа файлов:

var properties = new Dictionary<string, string>
                {
                    ["DesignTimeBuild"] = "true",
                    ["CheckForSystemRuntimeDependency"] = "true"
                };
                var workspace = MSBuildWorkspace.Create(properties);

                workspace.WorkspaceFailed += (sender, args) =>
                {

                };
                workspace.LoadMetadataForReferencedProjects = true;

Solution solution = workspace.OpenSolutionAsync(SolutionFilePath).Result;               
                    foreach (var p in solution.Projects)
                    {   
                        foreach (var file in p.Documents)
                        {
      var semanticModel = file.GetSemanticModelAsync().Result;

                        var mscorlib = MetadataReference.CreateFromFile(file.FilePath);
                    var compilation = CSharpCompilation.Create("MyCompilation",
                        new[] { semanticModel.SyntaxTree }, new[] { mscorlib });

                    var model = compilation.GetSemanticModel(semanticModel.SyntaxTree);
                    var declarationDiagnistics = model.Compilation.GetDeclarationDiagnostics(CancellationToken.None);
                    var parseDiagnostics = model.Compilation.GetParseDiagnostics(CancellationToken.None);
                    var allDiagnostics = model.Compilation.GetDiagnostics(CancellationToken.None);
                    var methodBodyDiagnostics = model.Compilation.GetMethodBodyDiagnostics(CancellationToken.None);

                                  }
                }

Подписка на событие workspace.workspaceFailed приводит к следующей ошибке:

Ошибка Msbuild при обработке файла 'MYPATH \ BLL.csproj' с сообщением: C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets: (1656, 5): Не удалось создать экземпляр задачи «GetReferenceNearestTargetFrameworkTask» из сборки «C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ CommonExtensions \ Microsoft \ NuGet \ NuGet.Build.Tasks.dll».Убедитесь, что сборка задачи была собрана с использованием той же версии сборки Microsoft.Build.Framework, что и на вашем компьютере, и что ваше хост-приложение не пропускает перенаправление привязки для Microsoft.Build.Framework.Невозможно привести объект типа «NuGet.Build.Tasks.GetReferenceNearestTargetFrameworkTask» к типу «Microsoft.Build.Framework.ITask».C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets: (1656, 5): задача «GetReferenceNearestTargetFrameworkTask» была объявлена ​​или использовалась неправильно, илине удалось во время строительства.Проверьте правильность написания имени задачи и имени сборки.

1 Ответ

0 голосов
/ 24 сентября 2018

Итак, наконец-то это решено:

  1. Добавлены перенаправления microsoft.build в соответствии с предложением @GeorgeAlexandria http://github.com/Microsoft/msbuild/issues/2369#issuecomment-353674937

  2. Очистил Microsoft.Build. * Из папки выходного лотка

  3. Добавлен Microsoft.Build.Locator в качестве ссылки

  4. Добавлена ​​строка MSBuildLocator.RegisterDefaults () над кодом рабочей области.

Источник: https://github.com/dotnet/roslyn/issues/26029#issuecomment-380164421

...