验证时发生错误。HRESULT ='8000000A'


98

在自动构建中使用devenv时,我已经收到此错误一段时间。我遍历了所有可以找到的网站,通常的回答都提到了刷新依赖关系(我相信它是为手动部署而修复的,但不是为自动更新的),并从项目中删除了源代码控制代码,这对我没有帮助。

每次构建时都不会发生该错误,但是每次在不同的部署项目上似乎都是随机的。

是否有人对为什么会发生此错误以及如何解决该错误有任何建议?


您终于得到了更优雅的解决方案吗?您刚刚在构建失败时重新触发了该构建,也许elegant solution是要点,恕我直言,这很有用。
Kiquenet '17

Answers:


53

这是Visual Studio 2010中的一个已知问题(竞争条件)。请参阅此连接项

我们也遇到了这个问题,并且Microsoft就此问题进行了非常不满意的支持电话。长话短说:这是一个已知问题,无法解决,Microsoft建议您远离Visual Studio安装程序项目(.vdproj)。

我们已通过在第一次失败时再次触发MSI构建来解决此问题。不好,但是它在大多数时间都有效(错误率从〜10%降至〜1%)。


非常感谢你。至少可以说,我一直在互联网上搜寻它到底为什么会发生的原因,并遇到了许多微软的模糊而无益的答复。当构建失败时,我只是重新触发它,但是希望有一个更优雅的解决方案。再次感谢。
克里斯·C

@ChrisC。stackoverflow.com/a/25054572/206730答案票数更多,您是否尝试过那样?
Kiquenet '17

@oɔɯǝɹ你能explane您saing触发MSI建造第二个时间是什么意思?有同样的问题..
莱昂巴坎

122

对于使用Microsoft Visual Studio安装程序项目扩展升级VS200X安装项目后针对VS2013或VS2015解决此问题的人员的更新。

遵循MS的v1.0.0.0配方,终于使它对我有用:

Microsoft Visual Studio安装程序项目

不幸的是,由于我们仍在研究解决这些问题的适当方法,因此无法解决此版本中所有命令行问题。我们所拥有的是一种解决方法,我们相信它将对几乎所有方法都适用。如果仍然遇到此问题,则可以尝试将以下注册表值的DWORD值更改为0:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\MSBuild\EnableOutOfProcBuild (VS2013)

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MSBuild\EnableOutOfProcBuild(VS2015)
如果不存在,则可以将其创建为DWORD。


23
请注意,Visual Studio 2013更新将清除注册表中的该变量-您将需要重新添加它。
Derek W

4
请注意,使用Jenkins时,需要为运行Jenkins从属的用户添加注册表项。
Jirong Hu

3
记住,注册表配置单元为HKEY_CURRENT_USER,因此,如果该注册表配置单元由与您不同的帐户(例如tfs构建帐户)调用,则需要以该帐户登录并添加设置。
Mike Cheel

3
要添加到@DerekW注释中,也可以通过自动更新将其删除。
JustAnotherDeveloper

2
@MikeCheel,您可以设置HKEY_USERS \ .DEFAULT \ Software \ Microsoft \ VisualStudio \ 14.0_Config \ MSBuild \ EnableOutOfProcBuild为所有用户修复它:)
Ian Ellis

57

截至2017年6月14日更新

Microsoft Visual Studio 2017安装程序项目扩展现在包括命令行帮助器工具,用于使注册表设置更容易应用 Microsoft Visual Studio 2017安装程序项目

该工具的示例路径(基于安装的Visual Studio版本)

专业版: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild\DisableOutOfProcBuild.exe


社区版: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild\DisableOutOfProcBuild.exe

从自述文件


这个简单的工具旨在帮助用户设置解决此错误所需的注册表项,该错误在使用命令行构建构建安装程序项目时可能会出现:

错误:验证时发生错误。HRESULT ='8000000A'

该工具适用于Visual Studio 2017+,并为当前用户的特定已安装Visual Studio实例设置此注册表项。因此,如果要在构建代理上设置此设置,请确保使用该构建将使用的用户帐户。

运行“ DisableOutOfProcBuild.exe帮助”以获取用法详细信息。



4
这是VS2017的最佳解决方案
Simon O'Beirne

我认为这是我第三次遇到此问题,花费了数小时进行修复,然后终于重新发现了这个答案。谢谢!
Hannes Sachsenhofer


非常适合在构建计算机上使用Visual Studio 2019社区版。
Max Power

48

我在网上某处阅读了有关此内容的信息,并已将其修复(有人建议)

  • 在记事本(或任何其他文本编辑器)中打开安装项目文件(.vdproj)
  • 在.vdproj文件的开头删除这些行:

    "SccProjectName" = "8:"
    "SccLocalPath" = "8:"
    "SccAuxPath" = "8:"
    "SccProvider" = "8:"
  • 重新构建-错误消失了

该错误并没有阻止我部署,构建,调试(或进行任何其他操作)我的项目,这只是让我烦恼。即使我将所有项目都设置为在当前配置中构建,而安装项目却未设置为构建,它也仍然可以实现。


3
问题的问题在于,这是一种竞争状况。进行(随机)调整和重建将使它看起来像是固定的。只是重建也会使问题消失。我想知道在100次构建后它是否仍然“固定”。
oɔɯǝɹ

6
可能是一种竞赛情况,但是上述修复有效并且可以使我继续生活(直到下一个使我精练堆栈溢出的问题:))
gls123 2012年

39

永久解决方案(用于构建机器的+)

Visual Studio 2017

对于VS 2017,请在目标Windows帐户下调用以下CMD脚本:

社区
专业
企业

TL; DR。差劲的笔记DisableOutOfProcBuild.exe,我为VS 2017使用的Microsoft提供的解决方案。

  1. DisableOutOfProcBuild.exe我认为您不会从安装文件夹中调用它。因此,您无法复制此.exe文件。(顺便说一句,如果要构建.vdproj,则必须安装VS。)
  2. DisableOutOfProcBuild.exe 仅当当前CMD目录设置为DisableOutOfProcBuild.exe的安装位置时,此选项才起作用。

例如,对于VS Professional版本,我们必须调用

CD "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild"
CALL DisableOutOfProcBuild.exe

Visual Studio 2015及更早版本

由CMD为当前Windows用户

对于许多人来说,创建/更正HKEY_CURRENT_USER\..并不总是有效或永久有效。
为了解决这个问题,我发现实际上我必须在HKEY_USERS下创建/更改一些奇怪的密钥 HKEY_USERS\S-1-5-xx-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxxxx-xxxxx\...\MSBuild

但是我还发现,如果将使用CMD控制台进行HKCU建议的修复程序,
REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f
它将把值准确地写入到怪异的键HKEY_USERS \ S-1-5-xx-xxxxxxxxxx-xx ...中,而不是HKEY_CURRENT_USER中

因此,这从一开始就永远有效。只需使用CMD控制台即可。

REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f
@REM (use 12.0_Config for VS2013)

生成服务器的求解器

另一方面,此代码始终适用于启动它的当前用户帐户(由于HKEY_CURRENT_USER)。但是构建服务器经常使用专用帐户或本地系统等。

我通过将以下简单批处理文件添加到构建任务(Jenkins,TeamCity,CruiseControl)中,将其固定在构建机器上

VS-2015VS-2013VS-2017-CommunityVS-2017-ProfessionalVS-2017-Enterprise


1
在对reg evrey进行补丁修复两年后,现在,并且CMD文件无法正常工作时,一些解决方案
CMS

1
从构建服务器上的安装项目构建MSI时,突然冒出了同样的问题。构建过程始终在以前进行过,并且没有更改,但始终失败。在调用devenv.exe之前将其添加到构建脚本中,它在VS 2013中对我有用。非常感谢。
吉姆(Jim)

在VS 15.8.x中,即使在运行EXE之后,我仍然收到此错误,但是通过关闭VS,然后运行EXE,然后重新启动VS,该错误得以解决。因此,VS中的某些功能是重置reg设置,解决方案是关闭VS,重新运行DisableOutOfProcBuild.exe,然后启动VS。
user2728841'1

1
此修复程序适用于VS2015 TFS vNext构建。我们使用本地NT Authority \ Network Service帐户进行自动构建,因此将RDPing中的reg密钥手动添加到构建VM中并不能解决自动构建错误。我在为VDPROJ文件调用Devenv.com的步骤之前添加了创建注册表项的步骤。经过很长时间的努力寻找解决方法后,我非常感谢it3xl发布它!!!
ckkkitty

6

正如在评论中指出这里,为VS2017您将需要创建DWORD HKEY_CURRENT_USER \ SOFTWARE \微软\ VisualStudio的\ 15.0_ [IDKey] _config \的MSBuild \ EnableOutOfProcBuild替换[IDKey]与现有的15.0子项的VisualStudio中的ID后缀。

例如,如果在VisualStudio下看到键“ 15.0_abcd1234”,则该键将为“ 15.0_abcd1234_Config”。

regedit示例



4

将项目移至另一台PC(VS 2010,一个解决方案中有多个项目)后,我遇到了这个问题。

它已经在源计算机中建立了我的项目,但是复制到目标后,我无法建立我的安装项目并出现此错误。

我打开了/Debug我的安装项目根目录路径下的文件夹,里面有MyProject.msisetup.exe文件,我删除了它们并再次构建了我的项目,它可以正常工作。希望它也适用于一些家伙。


再+1,只是删除.msi和setup.exe文件并重建安装项目使错误消息消失了
George

和-1,看来只是暂时解决了这个问题,在重新打开解决方案之后,问题又出现了
George

@ChrisSchiffhauer解决它,只有您删除了msi和exe文件
Kiquenet '17

@kubilay说得很好,非常感谢您的解决方案!!在将项目从较旧的框架移植到较新的框架时,可能会导致此问题,因为我们在项目属性中设置了较新的框架版本。安装项目可能在其目标位置中包含.msi和.exe文件。使用新的框架版本,它会在覆盖现有文件时产生错误。因此,右键单击安装项目->转到“输出文件名”(在Configuration Properties \ Build下)->单击“ ...”(浏览)按钮->获取目标位置,然后删除.msi和.exe文件。现在构建项目,它应该可以正常工作。
纳文·潘迪特

1

检查项目依赖项可能会有所帮助。

在VS 2010中,右键单击解决方案资源管理器,然后单击“检测到的依赖关系”和“刷新依赖关系”,这有时可以解决问题。


1

我正在使用VS 2017,但以上解决方案均无效。因此,升级了VS 2017的最新版本并应用了@AussieAsh解决方案及其正常工作...

我希望这种解决方案可能会有人工作。


0

和我一起是由错误的.suo文件引起的。(由skydrive引起)删除此文件解决了该问题。


DisableOutOfProcBuild.exe起作用了一段时间,直到没有起作用为止。删除.suo文件可解决此问题。
世哥

0

Visual Studio 2017将先前存储在公共注册表中的信息存储在新的私有注册表中:C:\ Users \\ AppData \ Local \ Microsoft \ VisualStudio \ 15.0_6de65198 \ privateregistry.bin

在此处,您需要按照VS2013 / VS2015的说明添加EnableOutOfProcBuild。

要更新私人注册表,您可以使用Regedit。

单击以选中HKEY_USERS节点。

选择“文件”>“加载配置单元”,然后导航至privateregistry.bin文件。当您选择它时,Regedit会询问您的名字-不管您叫什么名字,我们很快就会完成。

现在将出现注册表结构,您可以向下导航到Microsoft \ VisualStudio \ 15.0_Config \ MSBuild

创建一个新的DWORD EnableOutOfProcBuild,值为0。

完成后,选择配置单元的根(无论您之前如何命名),然后使用“文件”>“卸载配置单元”从其分离。

现在应该可以了:o)


无需弄乱私有注册表文件,您只需自己在常规注册表中创建15.0_ <x> _Config项即可(见上文)
Night94,2005年

0

我的Visual Studio 2013某种程度上成为实验性的,因此它开始为EnableOutOfProcBuild使用另一个注册表项

在此处输入图片说明

为了确保我刚刚在批处理文件中添加了另一行来设置注册表值,它开始起作用:

REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\12.0_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f
REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\12.0Exp_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f

0

只需运行此exe文件

(Visual Studio 2017社区版)

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ CommonExtensions \ Microsoft \ VSI \ DisableOutOfProcBuild \ DisableOutOfProcBuild.exe

(Visual Studio 2017企业版)

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ CommonExtensions \ Microsoft \ VSI \ DisableOutOfProcBuild \ DisableOutOfProcBuild.exe


0

好吧,我一直研究这个问题,直到我的脸变成蓝色,脸变成红色,失去了头发,失去了理智,然后尝试了所有可以找到的步骤。:-D

我针对Visual Studio 2017 / TeamCity的解决方案是@ it3xl的两个解决方案和@ Night94的一些帮助的组合

问题似乎是TeamCity用户的注册表项丢失。

  • 运行DisableOutOfProcBuild.exe 由@AussieAsh提到因而,因为它增加了只有我的用户的注册表项没有工作。
  • 从TeamCity运行时,使用@ it3xl提到的脚本也失败

因此,解决方案是在MSBuild之前从TeamCity添加以下内容作为命令行构建步骤:

REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\15.0_2c79e3fe_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f

一旦执行了此步骤,然后可以根据需要将其删除。

解决方案摘要

要么:

  • DisableOutOfProcBuild.exe 以TeamCity用户身份运行,或
  • 导航到注册表项HKCU\SOFTWARE\Microsoft\VisualStudio并检查列出的版本,然后修改以上内容REG ADD以匹配版本(请记住要添加_Config),作为TeamCity构建中的步骤。

同样,以上仅需执行一次。您可以禁用进入TeamCity,以便再次遇到问题时留作参考。


0

步骤1我已经“创建了一个名称为“ EnableOutOfProcBuild ” 的DWORD密钥,并在以下路径上将其值设置为“ 0

HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild

注意:请确保您以尝试构建项目的同一用户身份登录

对我来说很好。


-1

今天遇到了这个问题,请尝试重新启动Visual Studio,如果这样做不行,则会创建一个新项目,保存它,然后从问题项目中复制文件。两种方法都对我有用。


-3

请先清洁解决方案,构建解决方案,然后再尝试构建安装程序。它将消除错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.