为什么在构建安装项目时出现以下错误?
验证时出错。HRESULT = '80004005'
解决方案中的一个项目ToolsVersion="4.0"
(在 .csproj 文件中)将其更改为ToolsVersion="3.5"
并设置项目构建良好。
我发现的两个原因已经在其他答案中,但它们在单独的答案中并且没有完全解释。因此,希望这将结合各种可能性并提供良好的调试方法。:)
常见原因
我的问题不是依赖错误。然而,这似乎是普遍的原因。因此,基本上,您需要检查MSI文件并确保所有依赖项仍然有效。如果这是一个依赖问题,关于如何轻松解决此问题的最佳博客响应可能是验证时发生错误。HRESULT = '80004005'。
摘自博客:
请按照以下步骤进行故障排除。
- 如果您的解决方案中有多个项目输出,请确定出现问题的项目。您可以通过从设置项目中一次删除一个项目来做到这一点,直到错误消失。
确定项目后,确定可能导致问题的参考。
- 检查项目(A)是否引用了已从解决方案中删除的项目。- 删除此类引用(如果有)。
- 检查 Project(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
.
此错误与依赖项错误有关。我删除了对我的主要输出项目的所有引用并再次添加它们。现在可以编译了!
我今天遇到了这个问题。在我的情况下的解决方案?重新启动 Visual Studio 2008。
在我的情况下,我的解决方案(VS2008)有一个项目也被另一个解决方案(VS2010)引用。在 VS2010 解决方案中,我已将项目升级到 .NET 4.0。当我后来意识到该项目也用于另一个解决方案时,我将其降级为 .NET 3.5。由于某种原因,csproj 文件中的所有内容似乎都已正确更改,除了此处提到的一个地方:安装项目 HRESULT = '80004005' 中的错误
我知道这已经在其他地方解决了,但我想从另一个问题的角度阐明这一点。
虽然简单地删除和重新添加项目依赖项在许多情况下都会起作用,但需要注意的是:
错误消息“验证时发生错误。HRESULT=80004005。” 通常在项目被引用到未添加到当前 [原文如此] 解决方案中的另一个项目时发生。安装项目仅支持同一解决方案中的依赖项目。1
我自己花了很多时间在这个上,尽管上述方法都不起作用。但是我找到了另一种注册表黑客解决方案,您需要添加一个新的 DWORD ( EnableOutOfProcBuild
) 值 ( 0
) 到HKCU\SOFTWARE\Microsoft\VisualStudio\14.0_Config\MSBuild\EnableOutOfProcBuild
注意:这是针对 Visual Studio 2015
在我的情况下,我安装了 Visual Studio 2010 和 Visual Studio 2008。我的安装项目在 Visual Studio 2008 中打开时出现了同样的错误,但在 Visual Studio 2010 中正常。
如果复制到另一台没有 Visual Studio 2010 但有 Visual Studio 2008 的机器上,那么它会编译。
我安装了 Visual Studio 2010 并将解决方案转换为该版本。由于性能问题,我将解决方案改回 Visual Studio 2008。现在一切都好起来了,但是当我尝试编译安装项目时出现错误。我意识到我的解决方案中有一个 Visual Studio 2010 测试项目,所以我所要做的就是卸载测试项目并再次构建安装项目。
摘要:卸载解决方案中的任何 Visual Studio 2010 项目。
我希望它有所帮助。
我从 Stack Overflow 上的另一篇文章中读到了这个答案,它对我有用。
在记事本(或任何其他文本编辑器)中打开您的设置项目文件 (.vdproj )。删除 .vdproj 文件开头的这些行:
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"
再次构建 - 错误消失了。这个错误并没有阻止我部署、构建、调试(或任何)我的项目;它只是惹恼了我。即使我将所有项目设置为在当前配置中构建并且设置项目不设置,它也会出现。
我知道这是一个旧消息,但我的特定问题和解决方案没有在这里具体说明(据我所知 - 如果我错过了,我深表歉意)。
我有同样的问题。它不会编译我的项目,但没有错误。我只能看到“构建失败”。我打开了“输出”文件(单击菜单上的查看-> 输出),它准确地告诉我是哪个引用(在我的情况下是 .dll)导致了问题。
我删除并重新创建了引用,它将引用名称从 Microsoft.Office.Core(这似乎只是一个 32 位版本)更改为“OFFICE”。然后一切都很好。- 确保记下您在属性窗口中引用的文件的路径......我的新路径完全相同,但引用名称无论如何都改变了......仍然在那个问题上摸不着头脑。 ..
所以这个故事的寓意是......当你没有错误并且你的构建失败时,检查“输出”选项卡,它可能会有所帮助。