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

Posted

技术标签:

【中文标题】验证时出错。 HRESULT = \'8000000A\'【英文标题】:An error occurred while validating. HRESULT = '8000000A'验证时出错。 HRESULT = '8000000A' 【发布时间】:2012-01-28 17:23:11 【问题描述】:

在自动构建上使用 devenv 时,我收到此错误已有一段时间了。我浏览了我能找到的每个网站,通常的答案提到刷新依赖项(我相信它可以修复手动部署,但不能自动部署)并从项目中删除源代码控制编码,这对我没有帮助。

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

有人对为什么会发生此错误以及如何修复它有任何建议吗?

【问题讨论】:

你终于得到更优雅的解决方案了吗?您刚刚在构建失败时重新触发构建,恕我直言,可能有用的放置脚本 (elegant solution)。 【参考方案1】:

对于那些在使用 Microsoft Visual Studio 安装程序项目扩展升级 VS200X 安装项目后遇到此问题的 VS2013 或 VS2015 的用户的更新。

按照 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。

【讨论】:

请注意,Visual Studio 2013 更新将从您的注册表中清除此变量 - 您需要重新添加它。 请注意,使用 Jenkins 时,需要为运行 Jenkins slaves 的用户添加注册表项。 请记住,注册表配置单元是 HKEY_CURRENT_USER,因此如果它是由与您不同的帐户(例如 tfs 构建帐户)调用的,您将需要以该帐户登录并添加设置。 要添加到@DerekW cmets,这也可以通过自动更新来消除。 @MikeCheel 您可以设置 HKEY_USERS\.DEFAULT\Software\Microsoft\VisualStudio\14.0_Config\MSBuild\EnableOutOfProcBuild 为所有用户修复它:)【参考方案2】:

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

来自自述文件


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

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

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

运行“DisableOutOfProcBuild.exe help”了解使用详情。


【讨论】:

这是VS2017的最佳解决方案 我认为这是我第三次遇到这个问题,花了几个小时试图修复,然后终于重新发现了这个答案。谢谢! 您必须将目录更改为该位置才能正常工作。见github.com/it3xl/MSBuild-DevEnv-Build-Server-Workarounds/issues/… 和github.com/it3xl/MSBuild-DevEnv-Build-Server-Workarounds/blob/… 非常适合在我的构建机器上使用 Visual Studio 2019 社区版。 这对我也有用。通过 Azure 管道任务构建解决方案时,我遇到了同样的错误。我只是在 CommandLine 任务中调用了这个 exe 一次,它就成功了!【参考方案3】:

这是 Visual Studio 2010 中的一个已知问题(竞争条件)。见this connect item。

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

我们已通过在第一次失败时触发第二次 MSI 构建来解决此问题。不太好,但它大部分时间都有效(错误率从 ~ 10% 下降到 ~ 1%)。

【讨论】:

非常感谢。我一直在互联网上搜索究竟为什么会发生这种情况,并且遇到了许多微软的回复,这些回复至少可以说是模糊和无益的。我刚刚在构建失败时重新触发构建,但希望有一个更优雅的解决方案。再次感谢。 @ChrisC。 ***.com/a/25054572/206730回答得票多,你试过吗? @oɔɯǝɹ 你能解释一下第二次触发 MSI 构建的意思吗?,有同样的问题.. VS 2019 会发生这种情况。我仍然通过从“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions”运行“DisableOutOfProcBuild.exe”来解决它\Microsoft\VSI\DisableOutOfProcBuild"【参考方案4】:

我在网上的某个地方读到过这个,我已经修复了它(这是有人建议的)

在记事本(或任何其他文本编辑器)中打开您的安装项目文件 (.vdproj)

删除 .vdproj 文件开头的这些行:

"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"
再次构建 - 错误消失了

那个错误并没有阻止我部署、构建、调试(或任何其他)我的项目,它只是让我很恼火。即使我将所有项目设置为在当前配置中构建并且设置项目不设置,它也会出现。

【讨论】:

问题的问题在于它是一个竞争条件。进行(随机)调整和重建会使它看起来像是固定的。只是重建也会使问题消失。我想知道它在 100 次构建后是否仍然“固定”。 可能是一个竞争条件,但上述修复工作并允许我继续我的生活(直到下一个让我冲刷堆栈溢出的问题:))【参考方案5】:

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

Visual Studio 2017

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

Community 版Professional 版Enterprise 版本

TL;DR. 给可怜的 DisableOutOfProcBuild.exe 的注释,这是我在 VS 2017 中使用的 Microsoft 提供的解决方案。

    DisableOutOfProcBuild.exe 不会假设你会称它为 out of its installation folder。所以,你不能复制这个 .exe 文件。 (顺便说一句,如果你想构建.vdproj,你必须安装VS。) 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 及更早版本

为当前 Windows 用户使用 CMD

对于许多人来说,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-2015, VS-2013, VS-2017-Community, VS-2017-Professional, VS-2017-Enterprise

【讨论】:

在 reg evrey 几个月修补 2 年后,CMD 文件无法正常工作一些解决方案 从构建服务器上的安装项目构建 MSI 时突然弹出相同的问题。构建过程之前一直有效并且没有改变,但开始一直失败。在调用 devenv.exe 之前将其添加到构建脚本中,它在 VS 2013 中对我有用。非常感谢。 此修复适用于 VS2015 TFS vNext 构建。我们使用本地 NT Authority\Network Service 帐户进行自动构建,因此手动将 RDPing 中的 reg 密钥添加到构建 VM 中并不能修复自动构建错误。我在为 VDPROJ 文件调用 Devenv.com 的步骤之前添加了创建 reg 密钥的步骤。在为这个问题苦苦挣扎了这么久之后,我非常感谢 it3xl 发布它!!! 为我工作,非常感谢!我们正在使用 Bamboo 构建服务器,所以我只是在构建之前调用您的脚本。 这个问题在 Visual Studio 2022 上又回来了,在 2019 年不必担心它。这是在 vs 2022 中修复它的解决方案。路径是:C:\Program Files \Microsoft Visual Studio\2022\Professional\Common7\IDE\CommonExtensions\Microsoft\VSI\DisableOutOfProcBuild【参考方案6】:

正如 cmets here 中所指出的,对于 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”。

【讨论】:

【参考方案7】:

热修复现在上传到这里:

http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=33186

你可以在这里阅读:

http://connect.microsoft.com/VisualStudio/feedback/details/595632/inconsistent-hanging-with-devenv-2010

【讨论】:

正如您在我的答案中链接的连接项中看到的那样,该修补程序不起作用。【参考方案8】:

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

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

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

【讨论】:

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

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

在 VS 2010 中右键单击解决方案资源管理器,然后单击检测到的依赖项和刷新依赖项,有时它会解决问题。

【讨论】:

【参考方案10】:

只需运行这个 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

【讨论】:

【参考方案11】:

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

我希望这个解决方案可能有人会起作用。

【讨论】:

【参考方案12】:

好的,我一直在研究这个问题,直到我脸色发青,脸色发红,失去了头发,失去了理智,并尝试了我能找到的每一步。 :-D

我的 Visual Studio 2017 / TeamCity 解决方案结合了 @it3xl 的两种解决方案和 @Night94 的一些帮助。

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

运行 DisableOutOfProcBuild.exe as mentioned by @AussieAsh 因此不起作用,因为它仅为我的用户添加了注册表项。 使用@it3xl 提到的the script 在从 TeamCity 运行时也失败了

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

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 并检查列出的版本,然后修改上面的REG ADD 以匹配版本(记得添加_Config)作为TeamCity 构建中的一个步骤。

同样,上述操作只需执行一次。如果您再次遇到问题,您可以在 TeamCity 中禁用此步骤以供参考。

【讨论】:

【参考方案13】:

对我来说,这是由错误的 .suo 文件引起的。 (由skydrive引起) 删除这个文件解决了这个问题。

【讨论】:

DisableOutOfProcBuild.exe 工作了一段时间,直到没有。删除 .suo 文件解决了这个问题。【参考方案14】:

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

这是您需要根据 VS2013/VS2015 的说明添加 EnableOutOfProcBuild 的地方。

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

单击以选择 HKEY_USERS 节点。

选择文件 > 加载 Hive 并导航到 privateregistry.bin 文件。当您选择它时,Regedit 会要求您输入一个名称 - 您如何称呼它并不重要,因为我们很快就会完成。

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

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

完成后,选择 hive 的根目录(无论您之前如何命名),然后使用 File > Unload Hive 从中分离。

现在应该可以了 :o)

【讨论】:

不用弄私有注册表文件,你可以自己在常规注册表中创建 15.0__Config 键(见上文)【参考方案15】:

我的 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

【讨论】:

【参考方案16】:

Step-1 我已经“创建了一个名为“EnableOutOfProcBuild”的 DWORD 键,并将其值设置为“0”路径下方

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

注意:确保您使用与您尝试构建项目的用户相同的用户登录

对我来说很好用。

【讨论】:

【参考方案17】:

今天遇到这个问题,尝试重新启动 Visual Studio,如果还是不行,则创建一个新项目,保存它,然后将问题项目中的文件复制过来。这两种方法都对我有用。

【讨论】:

【参考方案18】:

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

【讨论】:

以上是关于验证时出错。 HRESULT = '8000000A'的主要内容,如果未能解决你的问题,请参考以下文章

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

将用户添加到 ADAM 中的角色时出错(发生约束冲突。(来自 HRESULT 的异常:0x8007202F)

卸载 appdomain 时出错。 (来自 HRESULT 的异常:0x80131015),在 Windows 服务中

尝试在音频播放代理中播放音频时出错。 System.SystemException:HRESULT = 0xC00D001A

部署 BizTalk 应用程序时出错 - 访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))

运行所选代码生成器时出错:无效指针(异常来自HRESULT:0x80004003(E_POINTER))