Roslyn MSBuild рабочее пространство добавляет дополнительный косой черты? - PullRequest
0 голосов
/ 09 мая 2018

Итак, мои настройки:

Microsoft.CodeAnalysis, v. 2.7.0 .... Microsoft.Build, v. 15.6.85

Это веб-приложение.

У меня есть следующий код:

var msWorkspace = MSBuildWorkspace.Create();
var solution = msWorkspace.OpenSolutionAsync(filePath).Result;

По сути, я хочу загрузить локальное (локальное по отношению к серверу) решение и провести его анализ.

Однако загрузка выполняетсякажется, что это вызывает проблемы, такие как:

Ошибка Msbuild при обработке файла 'C: \ Projects \ Project.csproj' с сообщением:

Не удалось выполнить задачу «RazorCodeGen»создается из сборки "C: \ Projects \ packages \ RazorGenerator.MsBuild.2.4.1 \ build \\ .. \ tools \ RazorGenerator.MsBuild.dll".Убедитесь, что сборка задачи была собрана с использованием той же версии сборки Microsoft.Build.Framework, что и на вашем компьютере, и что ваше хост-приложение не пропускает перенаправление привязки для Microsoft.Build.Framework.Невозможно привести объект типа «RazorGenerator.MsBuild.RazorCodeGen» к типу «Microsoft.Build.Framework.ITask».

Обратите внимание, что путь в сообщении об ошибке содержит: build \\ .. \tools.

Похоже, что в пути есть \\.

  1. Удаление дополнительной косой черты позволяет мне открыть задачу (поэтому она существует и существует)).

  2. Работы по открытию и созданию решения с использованием Visual Studio 2017 Community Edition.

  3. Работы по созданию решения с использованием MSBuild (v. 15.0)а также.

Я уже добавил перенаправления привязки из MSBuild.exe.config в свое приложение Web.Config.

Обновление:

Просто написал несколько строк кода, пытаясь построить решение с помощью Microsoft.Build.Execution.BuildManager и вывести ту же ошибку.Похоже, что проблема в MSBuild, а не в Roslyn / MSBuildWorkspace.

1 Ответ

0 голосов
/ 09 мая 2018

В рабочем пространстве Roslyn MSBuild добавлена ​​дополнительная косая черта?

После проверки сборки Microsoft.Build.Framework, используемой в проекте, RazorGenerator.MsBuild обнаружит, что она скомпилирована со старой версией MSBuild 4.0. эта ошибка возникает, когда приложение не может обработать несколько разных определений ITask (новое из вашего Microsoft.Build, v. 15.6.85).

Чтобы решить эту проблему, вы можете попробовать использовать по умолчанию Microsoft.Build.Framework ссылки на v4.0 или добавить Переадресация привязок :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Build.Framework" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Build" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Проверьте эту ветку для более подробной информации.

...