Исключение MSBuildWorkspace.Create() исключает

У меня есть Visual Studio 2013. Я также установил MSBuild Tools 2013. Следующий код дает мне исключение

var workspace=MSBuildWorkspace.Create();

Вот исключение

Не удалось загрузить файл или сборку "Microsoft.Build, Version = 14.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или одна из ее зависимостей. Система не может найти указанный файл.

Что я делаю неправильно?

Ответы

Ответ 2

Вы можете скомпилировать Roslyn против старой версии MSBuild, чтобы избежать этой проблемы. Я сделал это с VS 2012:

Src/Workspaces/Core/Workspaces.csproj
-    <Reference Include="Microsoft.Build, Version=$(VisualStudioReferenceAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-    <Reference Include="Microsoft.Build.Framework, Version=$(VisualStudioReferenceAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+    <Reference Include="Microsoft.Build" />
+    <Reference Include="Microsoft.Build.Framework" />

Src/Workspaces/CSharp/CSharpWorkspace.csproj
-    <Reference Include="Microsoft.Build, Version=$(VisualStudioReferenceAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-    <Reference Include="Microsoft.Build.Framework, Version=$(VisualStudioReferenceAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-    <Reference Include="Microsoft.Build.Tasks.$(MSBuildAssemblyNameFragment), Version=$(VisualStudioReferenceAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+    <Reference Include="Microsoft.Build" />
+    <Reference Include="Microsoft.Build.Framework" />
+    <Reference Include="Microsoft.Build.Tasks.v4.0" />

В основном я разделяю сильное имя (обратите внимание, что имя сборки Tasks отличается), поэтому он берет MSBuild из GAC, который поставляется с .NET Framework, для меня используется версия VS 2012.