在自动构建时使用devenv工具出现了一段时间的错误。我已经查看了所有可以找到的网站,通常的答案是刷新依赖项(我认为这只适用于手动部署,而不适用于自动部署),并从项目中删除源代码控制编码,但这对我没有帮助。
该错误并不是每次构建都会发生,但似乎每次在不同的部署项目上随机出现。
是否有人能够解释一下这个错误的原因,并提供如何解决它的建议?
在自动构建时使用devenv工具出现了一段时间的错误。我已经查看了所有可以找到的网站,通常的答案是刷新依赖项(我认为这只适用于手动部署,而不适用于自动部署),并从项目中删除源代码控制编码,但这对我没有帮助。
该错误并不是每次构建都会发生,但似乎每次在不同的部署项目上随机出现。
是否有人能够解释一下这个错误的原因,并提供如何解决它的建议?
对于那些在使用 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。
现在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”以获取使用详细信息。
这是Visual Studio 2010中一个已知的问题(竞争条件)。请参见此连接项目。
我们也遇到了这个问题,并且与微软就此问题进行了一次非常不尽人意的支持电话。长话短说:这是一个已知的问题,它不会得到解决,微软建议不要再使用Visual Studio安装程序项目(.vdproj)。
我们通过在第一次构建失败时触发MSI构建的第二次构建来解决了这个问题。虽然不是很好,但大多数时间是可行的(错误率从~10%降低到~1%)。
对于VS 2017,请在目标Windows账户下调用以下CMD脚本:
Community 版本
Professional 版本
Enterprise
版本
简而言之。 关于 DisableOutOfProcBuild.exe
,这是我在VS 2017中使用的微软提供的解决方案的注意事项。
DisableOutOfProcBuild.exe
不会默认你会在其安装文件夹外部调用它。所以,你不能复制这个 .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
使用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
(该文档为编程相关内容,包含多个链接,需使用者自行查看)我在网上看到过这个问题,并按以下方式进行了修复(是其他人建议的):
删除.vdproj文件开头的这些行:
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"
那个错误并没有阻止我部署、构建、调试(或者做任何事情)我的项目,只是让我感到烦恼。即使我将所有项目都设置为在当前配置下进行构建,并将安装程序项目排除在外,该错误仍然会出现。
我研究了这个问题很久,尝试了所有可以找到的步骤,直到脸都快要氧化了,头发也掉光了,最后我的解决方案是在@it3xl和@Night94的帮助下综合两种方案来解决 Visual Studio 2017 / TeamCity 的问题。
问题似乎是缺少TeamCity用户的注册表键。
DisableOutOfProcBuild.exe
如@AussieAsh所述,并没有起作用,因为它只添加了我的用户的注册表键。因此,解决方案是在MSBuild之前添加以下命令行构建步骤:
REG ADD HKCU\SOFTWARE\Microsoft\VisualStudio\15.0_2c79e3fe_Config\MSBuild /t REG_DWORD /v EnableOutOfProcBuild /d 0 /f
一旦运行该步骤,可以根据需要将其删除。
要么:
DisableOutOfProcBuild.exe
HKCU\SOFTWARE\Microsoft\VisualStudio
并检查列出的版本,然后在TeamCity构建中将上述REG ADD
修改为匹配版本(记得添加_Config
)。同样,以上操作仅需执行一次。之后您可以在TeamCity中禁用此步骤,并留作参考以防再次遇到此问题。
我遇到了和这篇博客相同的问题: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