Answers:
这是Visual Studio 2010中的一个已知问题(竞争条件)。请参阅此连接项。
我们也遇到了这个问题,并且Microsoft就此问题进行了非常不满意的支持电话。长话短说:这是一个已知问题,无法解决,Microsoft建议您远离Visual Studio安装程序项目(.vdproj)。
我们已通过在第一次失败时再次触发MSI构建来解决此问题。不好,但是它在大多数时间都有效(错误率从〜10%降至〜1%)。
对于使用Microsoft Visual Studio安装程序项目扩展升级VS200X安装项目后针对VS2013或VS2015解决此问题的人员的更新。
遵循MS的v1.0.0.0配方,终于使它对我有用:
不幸的是,由于我们仍在研究解决这些问题的适当方法,因此无法解决此版本中所有命令行问题。我们所拥有的是一种解决方法,我们相信它将对几乎所有方法都适用。如果仍然遇到此问题,则可以尝试将以下注册表值的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。
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帮助”以获取用法详细信息。
我在网上某处阅读了有关此内容的信息,并已将其修复(有人建议):
在.vdproj文件的开头删除这些行:
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"
该错误并没有阻止我部署,构建,调试(或进行任何其他操作)我的项目,这只是让我烦恼。即使我将所有项目都设置为在当前配置中构建,而安装项目却未设置为构建,它也仍然可以实现。
对于VS 2017,请在目标Windows帐户下调用以下CMD脚本:
TL; DR。差劲的笔记DisableOutOfProcBuild.exe
,我为VS 2017使用的Microsoft提供的解决方案。
DisableOutOfProcBuild.exe
我认为您不会从安装文件夹中调用它。因此,您无法复制此.exe文件。(顺便说一句,如果要构建.vdproj,则必须安装VS。)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
由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-2015, VS-2013, VS-2017-Community, VS-2017-Professional, VS-2017-Enterprise
现在,此修补程序已上传到此处:
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=33186
你可以在这里读到它:
将项目移至另一台PC(VS 2010,一个解决方案中有多个项目)后,我遇到了这个问题。
它已经在源计算机中建立了我的项目,但是复制到目标后,我无法建立我的安装项目并出现此错误。
我打开了/Debug
我的安装项目根目录路径下的文件夹,里面有MyProject.msi
和setup.exe
文件,我删除了它们并再次构建了我的项目,它可以正常工作。希望它也适用于一些家伙。
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)
我的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
只需运行此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
好吧,我一直研究这个问题,直到我的脸变成蓝色,脸变成红色,失去了头发,失去了理智,然后尝试了所有可以找到的步骤。:-D
我针对Visual Studio 2017 / TeamCity的解决方案是@ it3xl的两个解决方案和@ Night94的一些帮助的组合。
问题似乎是TeamCity用户的注册表项丢失。
DisableOutOfProcBuild.exe
由@AussieAsh提到因而,因为它增加了只有我的用户的注册表项没有工作。因此,解决方案是在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,以便再次遇到问题时留作参考。
步骤1我已经“创建了一个名称为“ EnableOutOfProcBuild ” 的DWORD密钥,并在以下路径上将其值设置为“ 0 ”
“HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild”
注意:请确保您以尝试构建项目的同一用户身份登录
对我来说很好。
elegant solution
是要点,恕我直言,这很有用。