VBC致命错误BC2000:项目已经有对程序集的引用

时间:2016-01-18 21:18:21

标签: .net vb.net msbuild vbc

我已经研究了这个问题几天没有答案。有对错误代码的引用,但我相信BC2000用于所有"编译器初始化"错误,无论潜在问题如何。

我有一个VS解决方案,可以在我们的开发环境中使用MSBuild 12.0进行编译。但是,当尝试使用MSBuild 12.0在我们的Win 2008 R2 SP1构建计算机中进行编译时,我们会收到致命错误。

正在为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命令在开发和构建机器中类似,并且它们仅引用一次提到的程序集。

开发和构建机器相同:

  • .NET Framework版本:4.6.1
  • 正在使用的MSBuild:12.0

不同:

  • Dev机器有VS 2010或VS 2013.
  • 构建机器没有安装VS.
  • 构建机器还安装了MS Visual C ++ Build Tools 2015。

以前有人遇到过这个问题吗?关于如何修复它的任何想法?感谢。

1 个答案:

答案 0 :(得分:1)

在开发机器中运行构建时,我检查了vbc命令(巨大的,所以我不会发布)并且它链接到以下文件夹中的Microsoft.VisualBasic.dll:

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

我注意到这个文件夹在构建机器中不可用,因为它没有.Net Framework 4 SDK。所以我安装了适用于Windows 7和.NET Framework 4的#34; Microsoft Windows SDK" (是的,即使构建机器是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. 如果它的目录与我在开头时所说的类似,那么可能需要为该版本的.Net Framework安装SDK。就我而言,该目录具有v4.0,因此它适用于.Net Fw 4.0。
  7. 希望这有助于其他人。