验证时出现错误。HRESULT='8000000A'。

116

在自动构建时使用devenv工具出现了一段时间的错误。我已经查看了所有可以找到的网站,通常的答案是刷新依赖项(我认为这只适用于手动部署,而不适用于自动部署),并从项目中删除源代码控制编码,但这对我没有帮助。

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

是否有人能够解释一下这个错误的原因,并提供如何解决它的建议?


你最终得到了更加优雅的解决方案吗?你只是在失败时重新触发构建,也许将脚本(优雅的解决方案)放在gist上会很有用,我个人认为。 - Kiquenet
19个回答

124

对于那些在使用 Microsoft Visual Studio Installer Projects 扩展升级 VS200X 安装项目后遇到此问题的用户,需要进行更新。

按照 MS v1.0.0.0 的方法,最终让我解决了这个问题:

Microsoft Visual Studio Installer Projects

不幸的是,我们无法解决所有与命令行问题有关的情况,因为我们仍在研究适当的解决方法。但是,我们有一个解决方法,我们相信几乎可以解决所有问题。如果你仍然遇到此问题,则可以尝试将以下注册表项中的 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。


26
注意,Visual Studio 2013 更新将从您的注册表中清除此变量 - 您需要重新添加它。 - Derek W
5
注意,在使用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
显示剩余6条评论

75

截至2017年6月14日更新

现在Microsoft Visual Studio 2017安装程序项目扩展包含一个命令行辅助工具,可以使注册表设置更容易应用 Microsoft Visual Studio 2017 Installer Projects

工具的示例路径(基于已安装的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

从README中得知


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

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

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

运行“DisableOutOfProcBuild.exe help”以获取使用详细信息。



5
这是VS2017的最佳解决方案。 - Simon O'Beirne
2
我想这已经是第三次遇到这个问题了,花费了数小时尝试去修复它,最后重新发现了这个答案。谢谢! - Hannes Sachsenhofer
3
为了使其正常工作,您需要更改目录到该位置。请参阅 https://github.com/it3xl/MSBuild-DevEnv-Build-Server-Workarounds/issues/1 和 https://github.com/it3xl/MSBuild-DevEnv-Build-Server-Workarounds/blob/master/workaround/DevEnv-Vdproj-VS2017_Professional-HRESULT-8000000A-EnableOutOfProcBuild.bat。 - GilesDMiddleton
1
非常适合我在构建机上使用Visual Studio 2019社区版。 - Max Power
这对我也起作用了。在通过 Azure 管道任务构建解决方案时,我遇到了完全相同的错误。我只是在 CommandLine 任务中调用了这个 exe 一次,然后它就起作用了! - pradeepradyumna

55

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

我们也遇到了这个问题,并且与微软就此问题进行了一次非常不尽人意的支持电话。长话短说:这是一个已知的问题,它不会得到解决,微软建议不要再使用Visual Studio安装程序项目(.vdproj)。

我们通过在第一次构建失败时触发MSI构建的第二次构建来解决了这个问题。虽然不是很好,但大多数时间是可行的(错误率从~10%降低到~1%)。


非常感谢。我一直在搜索互联网,想找出为什么会发生这种情况,并遇到了许多微软的回复,它们含糊不清,毫无帮助。当构建失败时,我只是一直在重新触发构建,但希望有一个更优雅的解决方案。再次感谢。 - Chris C.
@ChrisC。https://dev59.com/tWoy5IYBdhLWcg3wScLb#25054572的回答有更多的投票,你试过那样吗? - Kiquenet
@oɔɯǝɹ,您能解释一下触发 MSI 构建第二次的意思吗?我也遇到了同样的问题。 - Leon Barkan
2
这是在使用VS 2019时发生的。我仍然通过从“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild”运行“DisableOutOfProcBuild.exe”来解决它。 - pradeepradyumna

52

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

Visual Studio 2017

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

Community 版本
Professional 版本
Enterprise 版本

简而言之。 关于 DisableOutOfProcBuild.exe,这是我在VS 2017中使用的微软提供的解决方案的注意事项。

  1. DisableOutOfProcBuild.exe不会默认你会在其安装文件夹外部调用它。所以,你不能复制这个 .exe 文件。(顺便说一下,如果你想构建 .vdproj,你必须安装 VS。)
  2. DisableOutOfProcBuild.exe只有在当前CMD目录设置为DisableOutOfProcBuild.exe的安装位置时才能工作。

例如,对于VS专业版,我们必须调用

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
经过2年每几个月修补注册表并且CMD文件无法正常工作的情况,需要一些解决方案。 - CMS
1
在构建服务器上从设置项目构建MSI时,突然出现了同样的问题。构建过程以前总是正常工作的,但没有更改,却开始持续失败。在调用devenv.exe之前,我将此添加到构建脚本中,它在VS 2013中为我工作。非常感谢。 - Jim
1
这个修复方法适用于VS2015 TFS vNext构建。我们使用本地NT Authority\Network Service帐户进行自动构建,因此手动添加来自RDPing的reg键无法解决自动构建错误。我在调用VDPROJ文件的Devenv.com步骤之前添加了创建reg键的步骤。在苦苦寻找解决方法后,我非常感谢it3xl发布的信息! - ckkkitty
1
在 Visual Studio 2019 上不需要担心的问题,在我使用 Visual Studio 2022 时又出现了。以下是解决 Visual Studio 2022 中该问题的方法:路径为:C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild。 - user2728841
1
作为对我之前关于Visual Studio 2022的评论的更新 - 即使我重新运行DisableOutOfProcBuild,问题仍然会不断出现,但在运行DisableOutOfProcBuild后重新启动似乎每次都可以解决它,这非常令人沮丧,但至少有效。 - user2728841
显示剩余3条评论

49

我在网上看到过这个问题,并按以下方式进行了修复(是其他人建议的)

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

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

那个错误并没有阻止我部署、构建、调试(或者做任何事情)我的项目,只是让我感到烦恼。即使我将所有项目都设置为在当前配置下进行构建,并将安装程序项目排除在外,该错误仍然会出现。


3
问题在于这是一个竞争条件。进行(随机)调整并重新构建会让它看起来像已经修复了。仅仅重新构建也能使问题消失。我想知道在经过100次重新构建后它是否仍然“固定”了。 - oɔɯǝɹ
6
可能存在竞态条件,但上述修复方法有效,并且使我能够继续我的生活(直到下一个问题让我在 Stack Overflow 上搜索 :))。 - gls123

6
如评论这里所指出的那样,对于VS2017,您需要创建DWORD HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\15.0_[IDKey]_Config\MSBuild\EnableOutOfProcBuild。将[IDKey]替换为VisualStudio现有15.0子键的ID后缀。
例如,如果在VisualStudio下看到键"15.0_abcd1234",则应为"15.0_abcd1234_Config"。

regedit example


5

正如你可以在我回答中提供的连接项中所读到的那样,这个热修补程序不起作用。 - oɔɯǝɹ

4
我将我的项目移植到另一台电脑上(VS 2010,一个解决方案中有多个项目)后,我遇到了这个问题。 在源计算机上已经构建了我的项目,但是在复制到目标计算机后,我无法构建我的安装程序,并出现了这个错误。 我打开了Setup项目根路径下的/Debug文件夹,发现了MyProject.msi和setup.exe文件,我删除了它们并重新构建了我的项目,这次成功了。希望这个方法也适用于其他人。

再加上一个+1,只需删除.msi和setup.exe文件并重新构建安装项目即可消除错误消息。 - George
返回翻译后的文本:并且-1,它似乎只是暂时解决了这个问题,在重新打开解决方案后问题又出现了。 - George
@ChrisSchiffhauer,你是不是只删掉了msi和exe文件就解决了这个问题? - Kiquenet
@kubilay说得好,非常感谢您的解决方案!!这个问题可能会在将项目从旧框架移植到新框架时发生,因为我们在项目属性中设置了新框架版本。可能,安装程序项目包含.msi和.exe文件在其目标位置。使用新框架版本时,在覆盖现有文件时可能会生成错误。因此,请右键单击安装程序项目->转到“输出文件名”(在配置属性\构建下)->单击“...”(浏览)按钮->获取目标位置,并删除.msi以及.exe文件。现在重新构建项目,它应该可以工作。 - Navin Pandit

3

我研究了这个问题很久,尝试了所有可以找到的步骤,直到脸都快要氧化了,头发也掉光了,最后我的解决方案是在@it3xl@Night94的帮助下综合两种方案来解决 Visual Studio 2017 / TeamCity 的问题。

问题似乎是缺少TeamCity用户的注册表键。

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

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

一旦运行该步骤,可以根据需要将其删除。

解决方案概述

要么:

  • 作为TeamCity用户,运行DisableOutOfProcBuild.exe
  • 导航到注册表键HKCU\SOFTWARE\Microsoft\VisualStudio并检查列出的版本,然后在TeamCity构建中将上述REG ADD修改为匹配版本(记得添加_Config)。

同样,以上操作仅需执行一次。之后您可以在TeamCity中禁用此步骤,并留作参考以防再次遇到此问题。


3

我遇到了和这篇博客相同的问题:https://spin.atomicobject.com/2022/05/17/visual-studio-installer-azure/

以下是帮助解决问题的YML代码:

trigger:
- '*'

pool:
  vmImage: 'windows-2022'

variables:
  solution: '**/MySolution.sln'
  buildPlatform: 'Any CPU'
  devCmd: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\devenv.com'
  disableToolPath: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild'
  
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
  displayName: Restore NuGet packages
  inputs:
    restoreSolution: '$(solution)'

# https://github.com/it3xl/MSBuild-DevEnv-Build-Server-Workarounds/issues/1#issuecomment-525435637
- task: BatchScript@1
  displayName: Enable .vdproj Builds
  inputs:
    filename: '"$(disableToolPath)\DisableOutOfProcBuild.exe"'
    workingFolder: '"$(disableToolPath)"'

- script: '"$(devCmd)" $(System.DefaultWorkingDirectory)\MySolution.sln /Build "Release" /Project $(System.DefaultWorkingDirectory)\Installer\MyInstaller.vdproj'
  displayName: Build Installer

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