Ошибка MSBuild GenerateFakes MSB4127, MSB4060

При сборке с использованием Visual Studio 2013 GenerateFakes выполняется успешно, он использует тот же путь к тому же целевому файлу.

При сборке через MSBuild 12.0 (та же версия поставляется с Visual Studio 2013) я получаю следующие две ошибки.

Ошибка №1

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Fakes\Microsoft.QualityTools.Testing.Fakes.targets(128,5): error MSB4127: The "GenerateFakes" task could not be instantiated from the assembly "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Fakes\Microsoft.QualityTools.Testing.Fakes.Tasks.dll". Please verify the task assembly has been built using the same version of the Microsoft.Build.Framework assembly as the one installed on your computer and that your host application is not missing a binding redirect for Microsoft.Build.Framework. Unable to cast object of type 'Microsoft.QualityTools.Testing.Fakes.GenerateFakes' to type 'Microsoft.Build.Framework.ITask'. 

Ошибка №2

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Fakes\Microsoft.QualityTools.Testing.Fakes.targets(128,5): error MSB4060: The "GenerateFakes" task has been declared or used incorrectly, or failed during construction. Check the spelling of the task name and the assembly name.

Я мог успешно построить с помощью MSBuild 11.0 на старой машине, которая использовала Visual Studio 2012.

Может ли проблема быть связана с каким-то отсутствующим перенаправлением привязки?

Следующая ссылка содержит аналогичную ошибку, но для другой платформы: http://social.msdn.microsoft.com/forums/vstudio/en-US/2772a075-4e2f-42af-9e7a-2228b794368e/msbuild-crashes.-с-задачей-сообщения-неможетбытьсоздано-исключение

Только что заметил, что удаление папки FakeAssemblies во всех проектах решает проблему, однако, как только я снова создаю в Visual Studio, ошибка возвращается.


person Jack    schedule 20.05.2014    source источник
comment
Если вы используете MSTest, Fakes не удастся. Если вы используете средство выполнения тестов Visual Studio, подделки завершатся успешно. Visual Studio должна быть установлена ​​на сервере сборки. Может ли это быть проблемой?   -  person Magus    schedule 20.05.2014
comment
Магнус, я не уверен, это при компиляции кода на моей машине разработки, а не на сервере сборки. (Я использую MSBuild, потому что у нас есть несколько решений, и это позволяет мне открыть только один экземпляр Visual Studio).   -  person Jack    schedule 20.05.2014
comment
Что ж, Янк, обычно это больше проблема с тестированием, чем со сборкой. Если это действительно работало в 2012 году, это может быть настоящая ошибка.   -  person Magus    schedule 20.05.2014


Ответы (2)


Чтобы решить эту проблему, мне пришлось установить для VisualStudioVersion значение 12.0 в глобальных свойствах. Это нужно делать как при запуске MSBuild.exe из командной строки, так и при использовании MSBuild API.

Использование API:

Мне пришлось вручную ссылаться на библиотеки DLL MSBuild 12.0, которые можно найти в Program Files (x86)\MSBuild\12.0\Bin.

Затем скопировал перенаправления сборки из MSBuild.exe.config и вставил их в мой app.config.

  <runtime>
    <DisableFXClosureWalk enabled="true" />
    <generatePublisherEvidence enabled="false" />
    <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="12.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="12.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Build" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="12.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.CompactFramework.Build.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="12.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
person Jack    schedule 09.06.2014
comment
Этот раздел среды выполнения, скопированный в мой .config, спас меня! Пытался создать проект с использованием API MSBuild с кодом С#. Я терпел неудачу со следующей ошибкой: Задача CheckPathAttributes была объявлена ​​или использована неправильно, или произошел сбой во время построения. Проверьте правильность написания имени задачи и имени сборки. - person Adam Tal; 09.05.2015

См. сценарий файла проекта Visual Studio (.csproj). Вы можете открыть его в блокноте. Что такое ToolsVersion файла? Если это 4.0, вам нужно использовать MSbuild 4.0 для его сборки.

Visual Studio 2013 продолжает использовать MSBuild 4.0 для проектов, для которых toolVersion имеет значение 4.0.

person Hamid Shahid    schedule 20.05.2014
comment
Hamid, ToolsVersion — 4.0 в файле проекта, но исполняемый файл MSBuild, запущенный VS 2013, — 12.0 (C:\Program Files (x86)\MSBuild\12.0\bin\msbuild.exe), эта сборка кажется успешной. - person Jack; 20.05.2014
comment
Поделитесь, пожалуйста, логами сборки. Также вы используете полный путь к msbuild.exe 12.0 при запуске msbuild, то есть C:\Program Files (x86)\MSbuild\12.0\bin - person Hamid Shahid; 20.05.2014
comment
Мне интересно, может ли проблема быть связана с проблемой, указанной в этой ссылке: social.msdn.microsoft.com/forums/vstudio/en-US/< /а> - person Jack; 21.05.2014