Тип или пространство имен не найдено "отсутствуют ли ссылки на сборку", в то время как все ссылки верны

Я пытаюсь использовать класс MSBuildWorkspace. У меня есть все ссылки на сборку в моем проекте. Когда я открываю ссылку в браузере объектов, я вижу пространство имен и класс, который я пытаюсь использовать. Но в моей следующей инструкции использования

using Microsoft.CodeAnalysis.MSBuild

Я получаю

The type or namespace name 'MSBuild' does not exist in the namespace 'Microsoft.CodeAnalysis' (are you missing an assembly reference?)

Но смешно, что синтаксис highlighter распознает имя типа, его компилятор жалуется

enter image description here

Вот журнал сборки

   1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework.
    1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.VisualBasic.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework.
    1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.CSharp.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework.
    1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build.Framework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework.
    1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.VisualBasic.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build.Framework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework.
    1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.CSharp.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build.Framework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework.
    1>c:\users\fahadash\documents\visual studio 2012\Projects\RoslynEditor\RoslynEditor\MainWindow.xaml.cs(37,36,37,43): error CS0234: The type or namespace name 'MSBuild' does not exist in the namespace 'Microsoft.CodeAnalysis' (are you missing an assembly reference?)
    1>c:\users\fahadash\documents\visual studio 2012\Projects\RoslynEditor\RoslynEditor\MainWindow.xaml.cs(37,96,37,103): error CS0234: The type or namespace name 'MSBuild' does not exist in the namespace 'Microsoft.CodeAnalysis' (are you missing an assembly reference?)
    ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

Ответ 1

Итак, это:

warning MSB3258: Основная ссылка "Microsoft.CodeAnalysis.Workspaces" не может быть решена, поскольку она имеет косвенную зависимость от сборки .NET Framework "Microsoft.Build, Version = 12.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a", который имеет более высокую версию "12.0.0.0", чем версия "4.0.0.0" в текущей целевой структуре.

Предполагается, что вы создаете проект, ориентированный на платформу .NET 4.0. Вы должны ориентироваться на 4.5.1 с помощью Visual Studio 2013. Другие конфигурации не поддерживаются. Я не рекомендую пытаться "заставить" это заставлять замолчать предупреждение - это может просто вызвать проблемы в будущем. Roslyn использует API, добавленные в 4.5, так что у вас возникнут проблемы с попыткой заставить замолчать проблему.

Ответ 2

Я нашел этот пост в блоге из Nansen, и я применил исправление и решил проблему.

Резюме решения: Отредактируйте файл csproj в редакторе XML и найдите элементы для ссылок, которые вас беспокоят, и добавьте к ним следующий дочерний элемент.

<SpecificVersion>True</SpecificVersion>

Убедитесь, что слово True является только первой буквой в верхнем регистре (True, not true или TRUE).

Сохраните и перезагрузите проект в VS и создайте его.

Ответ 3

У меня было такое же сообщение об ошибке сборки, сгенерированное на сервере сборки при использовании ссылки на проект внутри моего проекта запуска - он отлично работал при построении через ID2 VS2013:

Невозможно найти имя типа или пространства имен "XYZ" (вы отсутствует директива using или ссылка на сборку?)

После запуска MSBuild.exe локально, а не на сервере сборки, я смог продублировать ошибку. Изучив файл .csproj для ссылки на проект, выгрузив его из решения, я заметил, что у меня есть следующая строка сверху:

<Project DefaultTargets="Configure" xmlns="..." ToolsVersion="12.0">

Я обновил его с помощью этой строки, следуя точной синтаксисе запускаемого проекта:

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="...">

Оказывается, свойство DefaultTargets должно быть одинаковым. Это причина, по которой ссылка на проект не включалась в параграф `/reference 'при попытке скомпилировать проект с помощью команды CSC.exe после запуска MSBuild.exe.

Мне понадобилось время, чтобы найти решение этой проблемы, так как я не мог найти ничего подобного на любом форуме. Это устаревшее приложение, которое всегда создавалось локально, а не на сервере сборки.

Кстати, использование PSBuild (интерфейс PowerShell для MSBuild) вместе с Markdown Pad 2 отлично работает при попытке устранить ошибки сборки.