验证.HRESULT T =’800000A’时发生错误

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

The error does not occur every time I build, but it seems random on different deployment projects each time.

对于为什么会发生这种错误以及如何修复它,有人有什么建议吗?

82111 次浏览

这是 VisualStudio2010中的一个已知问题(竞态条件)。

我们也遇到过这种情况,在这个问题上,我们与微软进行了一次非常不令人满意的支持电话会议。长话短说: 这是一个众所周知的问题,不会得到解决,微软建议远离 Visual Studio 安装项目(。Vdproj).

We've worked around this issue by triggering the MSI build a second time when it fails a first time. Not nice, but it works most of the time (error rate is down from ~ 10% to ~ 1%).

我在网上看到过,我把它修好了:

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

    "SccProjectName" = "8:"
    "SccLocalPath" = "8:"
    "SccAuxPath" = "8:"
    "SccProvider" = "8:"
    
  • build again - error is gone

That error didn't stop me from deploying, building, debugging (or anyting) my project it just annoyed me. And it came on even if I set all projects to be build in a current configuration and the setup project not to.

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

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

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

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

In VS 2010 right click in your solution explorer then click Detected Dependencies and Refresh Dependencies, it sometime resolves the problem.

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

Had this problem today, try restarting Visual Studio, if that doesn't do it create a new project, save it and then copy the files from the problem project over. both methods worked for me.

在使用 Microsoft Visual Studio Installer Projects 扩展升级 VS200X 安装项目之后,为那些在 VS2013或 VS2015中遇到此问题的用户更新。

遵循 MS 的 v1.0.0.0的配方,最终使它对我起作用:

MicrosoftVisualStudio 安装程序项目

不幸的是,我们无法解决这个版本的所有命令行问题,因为我们仍在研究解决这些问题的适当方法。我们确实有一个变通方案,我们相信这个方案对几乎所有人都有效。如果您仍然遇到这个问题,那么您可以尝试将以下注册表值的 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 2017

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

社区 版本
专业版
进取号 版本

注意不好的 DisableOutOfProcBuild.exe,微软提供的解决方案,我在 VS 2017中使用。

  1. DisableOutOfProcBuild.exe并不假定你会称它为 从它的安装文件夹。所以你不能复制这个。Exe 文件。(顺便说一句,如果你想建造。Vdproj,必须安装 VS)
  2. DisableOutOfProcBuild.exe will only work if the current CMD directory is set to the installation location of DisableOutOfProcBuild.exe.

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

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

VisualStudio2015及更早版本

由 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
这将把值精确地写入那个奇怪的键 USERS S-1-5-xx-xxxxxxxxx-xx...,而不是写入 HKEY _ CURRENT _ USER。 < br/>

所以,这从第一次拍摄就可以永远工作。只要使用 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)

Solver for Build Servers

On the other hand this code always works for a current user account which launches it (because of HKEY_CURRENT_USER). But build-servers often use dedicated accounts or Local System, etc.

我通过在构建任务(Jenkins、 TeamCity、 CruiseControl)中添加以下简单的批处理文件,在构建机器上修复了这个问题

VS-2015 VS-2013 VS-2017-社区, VS-2017-专业, VS-2017-进取号

正如在评论 给你中指出的,对于 VS2017,您需要创建 DWORD HKEY _ CURRENT _ USER Software Microsoft VisualStudio 15.0 _ [ IDKey ] _ Config MSBuild EnableOutOfProcBuild 用 VisualStudio 现有15.0子键的 ID 后缀替换[ IDKey ]。

例如,如果在 VisualStudio 下看到键“15.0 _ abcd1234”,那么它应该是“15.0 _ abcd1234 _ Config”。

regedit example

VisualStudio2017将以前存储在公共注册表中的信息存储在新的私有注册表中: C: 用户 AppData Local Microsoft VisualStudio 15.0 _ 6de65198 Privateregistry.bin

这里需要按照 VS2013/VS2015的说明添加 EnableOutOfProcBuild。

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

单击以选择 HKEY _ USERS 节点。

选择 File > Load Hive 并导航到 Privateregistry.bin 文件。当你选择它注册会要求一个名称-这不重要,你叫它,因为我们很快就会做。

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

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

完成之后,选择 Hive 的 root (不管您之前如何命名它) ,并使用 File > Unload Hive 与之分离。

现在它应该起作用了: o)

截至2017年6月14日更新

MicrosoftVisualStudio2017Installer 项目扩展现在包含一个命令行帮助工具,用于使注册表设置更容易应用 Microsoft Visual Studio 2017 Installer Projects

工具的示例路径(基于安装的 VisualStudio 版本)

Professional Edition: 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


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

错误: 验证时发生错误

该工具适用于 VisualStudio2017 + ,并为当前用户的特定已安装的 VisualStudio 实例设置此 reg 键。因此,如果要在生成代理上设置此选项,请确保使用生成将使用的用户帐户。

运行“ DisableOutOfProcBuild.exe help”获取使用细节。


我的 VisualStudio2013以某种方式变成了 实验性的,所以它开始使用另一个 EnableOutOfProcBuild注册表项

enter image description here

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

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

只要运行这个 exe

(VisualStudio2017社区版)

C: Program Files (x86) MicrosoftVisual Studio 2017 Community Common7 IDE CommonExtended MicrosoftVSI DisableOutOfProcBuild DisableOutOfProcBuild.exe

(Visual Studio 2017企业版)

C: 程序文件(x86) Microsoft Visual Studio 2017 Enterprise Common7 IDE CommonExtended Microsoft VSI DisableOutOfProcBuild DisableOutOfProcBuild.exe

我正在使用 VS2017,但没有上述解决方案的工作。 因此,升级最新版本的 VS 2017和应用@AussieAsh 解决方案及其工作罚款..。

我希望这个解决办法有人能行得通。

Okay I looked into this issue until I was blue in the face, red in the face, losing my hair, and losing my mind, and tried every step I could find. :-D

My solution for Visual Studio 2017 / TeamCity was a combination of the two solutions from @ it3xl and some assistance from @ Night94.

问题似乎是 TeamCity user的注册表项不见了。

  • 因此,运行 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

Once this step ran, it could then be removed if required.

解决方案总结

或者:

  • run DisableOutOfProcBuild.exe 作为 TeamCity 的用户, or
  • navigate to the registry key HKCU\SOFTWARE\Microsoft\VisualStudio and check the version listed, then amend the above REG ADD to match the versions (remember to add _Config) as a step in the TeamCity build.

同样,上面的步骤只需要完成一次。然后,您可以在 TeamCity 中禁用这一步骤,如果再次遇到这个问题,可以将其留作参考。

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

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

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

It is working fine for me.

结束在同一个问题,这个博客帮助我 https://spin.atomicobject.com/2022/05/17/visual-studio-installer-azure/

这里是基督教青年会

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