Тип или пространство имен не найдено "Вы пропустили ссылку на сборку", хотя все ссылки верны
Я пытаюсь использовать класс 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?)
Но забавно, что подсветка синтаксиса распознает имя типа, его компилятор жалуется
Вот журнал сборки
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 ==========
3 ответа
Итак, это:
предупреждение MSB3258: первичная ссылка "Microsoft.CodeAnalysis.Workspaces" не может быть разрешена, поскольку она имеет косвенную зависимость от сборки.NET Framework "Microsoft.Build, версия =12.0.0.0, культура = нейтральная, PublicKeyToken=b03f5f7f11d50a3a", которая имеет более высокая версия "12.0.0.0", чем версия "4.0.0.0" в текущей целевой структуре.
Означает, что вы создаете проект, ориентированный на.NET 4.0 framework. Вы должны ориентироваться на 4.5.1 с Visual Studio 2013. Другие конфигурации не поддерживаются. Я не рекомендую пытаться "форсировать" это, заставляя глушить предупреждение - это может вызвать проблемы в будущем. Roslyn использует API-интерфейсы, добавленные в 4.5, поэтому у вас будут проблемы с попыткой заставить замолчать проблему.
Я нашел это сообщение в блоге от Нансена, и я применил исправление, и моя проблема была решена.
Краткое изложение решения: отредактируйте файл csproj в редакторе XML, найдите элементы для ссылок, которые вас беспокоят, и добавьте к ним следующий дочерний элемент.
<SpecificVersion>True</SpecificVersion>
Убедитесь, что слово True - только первая буква в верхнем регистре (True, не true или TRUE).
Сохраните и перезагрузите проект в VS и соберите его.
У меня было то же сообщение об ошибке сборки, сгенерированное с сервера сборки при использовании ссылки на проект внутри моего запускаемого проекта - оно работало нормально при сборке с помощью ID201 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 прекрасно работает локально при попытке устранения ошибок сборки.