vbc.exe以代码-2146232797退出

7

我正在将一个包含多个项目的解决方案迁移到VS 2015。在VS 2013中,基础项目可以正常构建。但是当我尝试在VS 2015中构建时,出现了下面的错误。

C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.VisualBasic.Core.targets(56,5): error MSB6006: “vbc.exe” 以代码-2146232797退出。

请求帮助。


它决定使用Environment.FailFast()结束一天。如果你在输出窗口中没有看到任何东西,那么没有人能告诉你为什么。如果这发生在一个“hello world”项目上,那么你需要让你的机器恢复健康。如果只是特定的项目,那么你需要注释掉代码块以缩小范围。 - Hans Passant
我现在遇到了完全相同的错误。昨晚我将Visual Studio 2015升级到Update 1,现在我的项目无法编译。在Update 1之前,它在Visual Studio 2015中运行良好。有人对此有什么建议吗? - dub stylee
12个回答

7

我和微软技术支持人员进行了交流,确认这是VB编译器中的一个已知问题。他们表示这个问题将在下一个更新中修复。

与此同时,可以通过安装Nuget包来解决问题。

请按照以下步骤安装Nuget包。

  1. Open the affected project in Visual Studio

  2. Open the Package Manager Console (Tools -> NuGet Package Manager -> Package Manager Console)

  3. Run:

    Install-package Microsoft.Net.Compilers -version 1.1.1
    

我有一个项目(17个解决方案中的一个),在安装了VS 2015更新1之前一直编译正常,但是安装后我们开始遇到vbc.exe崩溃的问题。为该项目安装上述Nuget包已经起作用,但似乎并不理想。 - Brendan
这并不理想,他们说会在下一个版本中修复...但是不知道那是什么时候... - Brien King
我不知道为什么或者怎么做到的,但这帮助我解决了在我的Ubuntu机器上使用.NET Framework 4.5 VB.net时遇到的编译异常。=) - cavpollo

3
我有一个庞大的解决方案,在更新到VS 2015 Update 1 RTM后无法构建。在我的情况下,“vbc.exe”崩溃之前,出现了许多警告消息,如下所示:
“Imports '' 中指定的命名空间或类型不包含任何公共成员或无法找到。请确保命名空间或类型已定义并且至少包含一个公共成员。请确保导入的元素名称未使用任何别名。”
一旦我删除了这些额外且不必要的“Imports”,解决方案就可以成功构建。

2
在我的情况下,我发现有一个导入问题。具体地说,在尝试了很多其他建议之后,从文件中删除Microsoft.Office.Interop.Excel的导入语句最终使我的项目成功构建。

2

最新的Visual Studio 2015服务更新已经解决了这个问题。相关下载链接为KB 3110221,详细信息请查看此KB文章


遗憾的是,这只能解决一些特定问题。安装了这个补丁之后,我仍然收到完全相同的消息。 - InsertOldUserIDHere

1
我安装vs2015后立即遇到了许可证问题,与微软的许可证不一致,最终我输了。 :-(
刚回到工作中,我遇到了这个问题。
我尝试了Brien King建议的NUGET,但问题仍然存在。 我尝试了Teodor Constantinescu建议的KN,但问题仍然存在。
我尝试了一个新的简单Web应用程序,一切正常,所以我没有卸载vs2013或vs2015。
我选择备份我的项目(三次,其中一次在我放在另一个房间的USB上),并删除文件组并在每个文件组被拔出后编译。 最终,在接近结尾时(几乎是空项目)进行了编译。
通过添加文件组,我确定了导致此问题的单个文件。 我可以通过取消注释单行来重新创建此问题。
进一步注释代码后,我将问题隔离为4行代码。 很美妙。 解释如下...
我有2个Web引用引用ssrs
这些目前在我的项目中定义为 SSRS_reportservice2010 和SSRS_ReportExecution2005
我曾经为了让这些工作正常而苦苦挣扎,所以随着时间的推移,我删除和重新添加Web引用时使用了不同的名称。(Padawan)
由于某种原因,一个之前被排除的文件今天被包含了进来(2013年->2015年的问题,或者格雷格老鼠放屁的问题?我们永远不会知道)。
在那个(错误包含的)文件中,有一对旧引用。
'1 Imports SSRS_ReportingService2010
'2 Imports SSRS = SSRS_ReportingService2010
'3 Imports SSRS_ReportExecution
'4 Imports SSRS_E = SSRS_ReportExecution

第一行曾经引用WS,现在在我的应用程序中被命名为SSRS_reportservice2010。您可以取消注释它,然后编译和运行。请注意,您会收到警告,因为您正在引用一个空名称空间。

当然,第二行是长名称的别名,因为我是一个极其懒惰的打字员,而且我坚持我的代码可读性,长名称是不好的。如果取消第二行的注释,则会导致vbc错误-2146232797。请注意,取消2或1&2的注释都会导致此错误。这似乎与错误的别名有关,会导致编译器出错。

请重复上述讨论,其中第3行和第4行与当前命名为SSRS_ReportExecution2005的Web服务有关。

所以你有了答案。我花了8个小时来调试它。希望能对某人有所帮助。

许多其他帖子,评论等也提到了Import / Using语句。根本的错误可能就在那里....(是的,这是编译器中的错误)

PS-有趣的是,有问题的文件名以W开头,因此是最先出现的之一。将该文件完全从项目中删除后,情况并没有改善。

我无法解释为什么一旦我移除了有问题的文件,应用程序就无法编译。我可以提供的是,我在很晚的阶段才删除了Web服务,我只是认为它们不是问题所在。
让我感到困惑的是,当文件消失后,我仍然会遇到问题,而现在我只需注释掉4行代码,就可以完美地运行。

1
抱歉,这是第二个答案,但这个答案要简单得多。 8天后,我在另一个项目中再次遇到了错误。
这次,我开始时给一个类取了更好的名字。 我有一个名为conversionFactors的类,我将该类重命名为constants以更好地表示该类所保存的内容。
立即出现了错误。 vbc.exe"退出代码为-2146232797。SizingEngine 我追踪到了这一行。我应该使用重命名工具。是的,没有争议。编译器也应该更加健壮。嘘,嘘,微软。
Imports cf = SizingEngine.conversionFactors

所需步骤: 1. 创建一个新项目 2. 创建名为Foo的类 3. 创建名为Bar的类

  1. 在Bar中,添加以下行

    imports bar_ = project1.NoClassByThisNameExists

  2. 点击f5

  3. 听取吃豆人凋谢声音

注 - VS今天没有报告任何可供下载的更新。我相信这个问题最终会得到解决。


1

我通过打开所有的.vb文件并删除多余的导入来解决了这个问题。对于所有文件都要这样做,然后重新构建即可。这应该可以解决问题。


1
尝试了Microsoft.Net.Compilers -version 1.1.1和KB3110221后,我的解决方案仍无法编译,并出现相同的错误。直到后来我才注意到该错误伴随着一个警告,提示我解决方案引用的一个库是使用.NET Framework 4.5.2编译的,而我的解决方案正在使用.NET Framework 4.5进行编译。我重新对该库使用.NET Framework 4.5进行编译,然后解决方案成功编译。
现在,经过三次修复后,我的问题得到了解决,但我无法确定最后一个修复是否足够,但希望它能有所帮助。

1

在安装VS 2015更新1后,我遇到了同样的问题。

根据Brien King的建议,我下载了Microsoft.Net.Compilers NuGet包。这解决了一个项目的问题。然后:

"c:\Program Files (x86)\MSBuild\14.0\Bin\vbc.exe" 版本为1.1.0.51109 ...userprofile.nuget\packages\Microsoft.Net.Compilers\1.1.1\tools\vbc.exe 版本更高,为1.1.0.51202

因此,我将整个“1.1.1\tools”目录复制到“14.0\Bin”目录中,并覆盖了27个现有文件。

这解决了所有项目的问题。记得在执行此操作之前创建备份。


0
当我遇到一个后构建事件抛出错误时,我遇到了这个错误。没有任何迹象表明这是问题,只有-2146232797错误。
因此,请在项目的属性页面中检查此内容。转到编译 -> 构建事件...并检查后构建事件命令行字段。我想这可能会发生在预构建事件中,所以也要检查一下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接