当构建设置项目时,为什么会出现“验证时出错。HRESULT = '80004005'”?

23
当构建安装程序时,为什么会出现以下错误?

验证过程中发生错误。 HRESULT = '80004005'

11个回答

21

一个解决方案中的一个项目在.csproj文件中有ToolsVersion="4.0",将其更改为ToolsVersion="3.5"后,设置项目可以成功构建。


这让我免于错过截止日期。工作正常。 - Never Quit

15

我发现的原因已经在其他答案中了,但它们是分开的且没有完全解释。因此,希望这篇文章可以将可能性结合起来,并提供良好的调试方法。 :)

常见原因

我的问题不是依赖项错误。然而,那似乎是常见的原因。所以,基本上,您需要检查您的MSI文件,并确保所有依赖项仍然有效。如果这是一个依赖项问题,则最好的博客响应是验证时出错。HRESULT = '80004005'

从博客中提取的内容:

按照以下步骤进行故障排除。

  • 如果您的解决方案中有多个项目输出,请确定出现问题的项目。您可以通过从安装程序(S)中逐个删除一个项目来完成此操作。直到错误消失为止。
  • 一旦确定了项目,请确定可能会导致问题的引用。

    • 检查项目(A)是否引用已从解决方案中删除的项目。- 如果有,请删除此类引用。
    • 检查项目(A) 是否参考了在添加为引用后移动到不同物理位置的项目。 - 删除并添加此类引用。
  • 根据需要修复引用后重新构建设置项目,以查看错误是否消失。

替代原因

我的问题与Visual Studio版本有关。如果你的依赖项是有效的,但仍然遇到这个问题,那么你可以解决这个问题,如果是VS2010的问题,请参考
基本上,如果你运行MSBuild并看到这个警告:

项目文件包含ToolsVersion="4.0",这在此版本的MSBuild中不受支持。将该项目视为具有ToolsVersion="3.5"

那么问题就在于Visual Studio版本。这意味着一个项目是在Visual Studio 2010中打开或创建的,然后保存或添加到现有的3.5解决方案中。我只需要在我的项目中搜索所有文件以查找ToolsVersion="4.0",找到有问题的.csproj文件,用文本编辑器打开它,并手动将4.0更改为3.5即可。

5

这个错误与依赖项有关。我删除了所有对主输出项目的引用,然后再次添加它们。现在可以编译成功!


4
在我的情况下,我的解决方案(VS2008)有一个项目也被另一个解决方案(VS2010)所引用。在VS2010解决方案中,我将该项目升级到.NET 4.0。后来我意识到该项目也被用于另一个解决方案中,我将其降级为.NET 3.5。由于某种原因,csproj文件中的所有内容似乎都已正确更改,除了这里提到的一个地方:Error in setup project HRESULT = '80004005' 我知道这个问题已经在其他地方解决了,但我想从另一个问题角度来解释这个问题。

4

今天我遇到了这个问题,在我的情况下解决方法是重新启动Visual Studio 2008。


3

尽管在许多情况下,简单地删除并重新添加项目依赖关系就可以解决问题,但需要注意以下几点:

当项目引用未添加到当前解决方案的其他项目时,通常会出现“验证时发生错误。 HRESULT = 80004005。”的错误消息。设置项目仅支持同一解决方案中的依赖项项目。1


该链接似乎已经失效。 - Peter Mortensen

3

虽然上面的方法都没有起作用,但我自己花了很多时间研究出了另一种注册表修改的解决方案。你需要在 HKCU\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild\EnableOutOfProcBuild 中添加一个名为 EnableOutOfProcBuild 的新 DWORD 值,并将其设置为 0

注意:此方法适用于 Visual Studio 2015。


1
在我的情况下,我已经安装了Visual Studio 2010和Visual Studio 2008。当我在Visual Studio 2008中打开我的设置项目时,会出现相同的错误,但在Visual Studio 2010中则没有问题。
如果将该项目复制到另一台没有安装Visual Studio 2010但安装了Visual Studio 2008的机器上,则可以编译成功。

0
我在Stack Overflow的另一篇帖子中读到了这个答案,它对我很有用。
Notepad(或任何其他文本编辑器)中打开您的安装程序项目文件(.vdproj)。删除.vdproj文件开头的这些行:
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"

再次构建 - 错误已经消失了。那个错误没有阻止我部署、构建、调试(或任何其他操作)我的项目;它只是让我感到恼怒。即使我将所有项目都设置为在当前配置中进行构建,并且不进行设置项目的构建,错误仍然出现。

0

我知道这可能是旧新闻了,但我的问题和解决方案在这里没有被明确定义(就我所知 - 如果我错过了,我很抱歉)。

我有同样的问题。 它无法编译我的项目,但没有错误。 我所能看到的只有“构建失败”。 我打开了“输出”文件(单击菜单上的“查看”->“输出”),它告诉我哪个引用(在我的情况下为.dll)导致问题。

我删除并重新创建了引用,并将引用名称从Microsoft.Office.Core(显然仅为32位版本)更改为“OFFICE”。 然后一切都很好。-请确保在属性窗口中记下引用文件的路径...我的新路径完全相同,但引用名称仍然发生了变化...还在思考那一个...

所以故事的寓意是...当您没有错误而构建失败时,请检查“输出”选项卡,它可能会有所帮助。


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