2016-01-18 7 views
2

Я исследовал эту проблему в течение нескольких дней без ответа. Есть ссылки на код ошибки, но я считаю, что BC2000 используется для всех ошибок «инициализации компилятора», независимо от основной проблемы.VBC Неустранимая ошибка BC2000: Проект уже имеет ссылку на сборку

У меня есть VS-решение, которое отлично компилируется в нашей среде разработчиков с MSBuild 12.0. Однако при попытке скомпилировать в нашей сборщике Win 2008 R2 SP1 с использованием MSBuild 12.0 мы получаем фатальную ошибку.

Команда выполняется для MSBuild является:

"C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe" "path\to\solution.sln" /target:Clean;Build /verbosity:normal /toolsversion:12.0 /nologo /property:WarningLevel="2" /property:Configuration="Release" 

получил Ошибка:

vbc: Error: Fatal error BC2000 : compiler initialization failed unexpectedly: Project already has a reference to assembly Microsoft.VisualBasic. A second reference to 'path\to\dotnet4\System.dll' cannot be added. (Fatal error BC2000) 

Это похоже на this question. Однако у нас нет настроек их использования, поскольку мы не используем Mono.

В рассматриваемом проекте имеется только одна ссылка на сборку Microsoft.VisualBasic. Кроме того, выполняемые команды vbc аналогичны в машинах dev и build, и они ссылаются только на упомянутую сборку один раз.

То же самое для разработчика и строить машины:

  • .NET Framework версия: 4.6.1
  • MSBuild используется: 12,0

Different:

  • Dev машины имеют либо VS 2010, либо VS 2013.
  • Строительная машина делает не установлено VS.
  • На встроенном компьютере также установлены средства сборки Visual C++ Visual C++ 2015.

Неужели кто-нибудь сталкивался с этим вопросом раньше? Любые идеи о том, как исправить это? Благодарю.

ответ

1

При запуске сборки в Dev машине, я проверил VBC команду (огромный, так что я не буду размещать), и это было ссылки на Microsoft.VisualBasic.dll в следующей папке:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0 

Я заметил, что эта папка не была доступна на машине сборки, так как у нее не было .Net Framework 4 SDK. Поэтому я установил «Microsoft Windows SDK для Windows 7 и .NET Framework 4» (да, даже если машина сборки как Win 2008 R2), и она сработала.

Теперь, чтобы установить этот SDK, мне пришлось сначала удалить .Net Framework, потому что это была более новая версия, а затем установить .Net Framework 4, а затем упомянутый SDK, а затем снова обновить до .Net Framework 4.6.1 ,

Итак, в заключение:

  1. Выполнить MSBuild в машине построения и перенаправить вывод в файл журнала
  2. Откройте файл журнала и проверить VBC команды, которые не удалось
  3. Выполнить MSBuild в разработчика машина и перенаправить вывод в файл журнала
  4. Откройте файл журнала и найдите команду, указанную в действии 2
  5. Проверьте, где находится сборка (из-за ошибки)
  6. Если это каталог, аналогичный тому, что я сказал в начале, то, возможно, вам нужно установить SDK для .Net Framework указанной версии. В моем случае в каталоге был v4.0, поэтому он был для .Net Fw 4.0.

Надеюсь, это поможет кому-то еще.