Visual Studio 2015:项目集合中已存在等效项目

Visual Studio 2015: An equivalent project is already present in the project collection

尝试将现有项目添加回 Visual Studio 2015 解决方案时,VS 给出以下错误消息。我已经确认我还没有添加对我要添加的项目的引用。是否有我需要删除或清理的设置或缓存文件?

An equivalent project (a project with the same global properties and tools version) is already present in the project collection, with the path "D:\My\Path\MyProject.csproj". To load an equivalent into this project collection, unload this project first.

仍然不确定是什么原因导致这种情况发生,但似乎以相反的顺序添加依赖项目允许我重新添加我的所有项目。因此首先添加所有子项目,然后添加它们所依赖的父项目。它们被添加回溶液的顺序可能导致了片状。

这发生在我蓝屏之后。以下似乎修复了它:

  1. 启动 VS2015 cmd 提示符。
  2. 运行 "devenv /resetuserdata"

Windows 重新启动为我解决了这个问题。 重新启动后 Visual Studio 不会显示这种奇怪的错误消息。

这个 link 为我提供了一种简单的预防方法,比 运行 {VSpath}\devenv.exe /resetuserdata

更有效

我发现通过向项目添加过滤器(即使我不是特别需要)我可以强制 VS2015 创建一个 .vcxproj.filters 文件。 一旦到位,我就不再发现问题了。

顺便说一句,在我的例子中,问题是通过卸载项目触发的,在 .vcxproj 文件中进行棘手的更改(涉及 属性 值的 [MSBuild] 算术),然后尝试重新加载项目,并由于语法​​错误而失败。修复错误,removing/re-adding 项目等没有工作。 'already present' 错误仍然存​​在。

只是 "Clean Solution" 对我有用。

就我而言,我在执行以下操作时看到此错误:

我在 including/importing 3.vcxproj 里面 2.vcxproj 而 2.vcxproj 被包含在 1.vcxproj.

2.vcxproj 中 3.vcxproj 的路径是错误的,这给了我上述错误。

更正了路径,错误消失了。不确定过滤器之间的关系。

这发生在我用外部编辑器弄乱我的项目文件之后。我能够通过退出 VS 并杀死 VsHub.exe.

来解决问题

似乎 VsHub.exe 缓存了项目的某些部分并变得混淆或 out-of-sync 与 VS。

我是通过代码调用的

这为我修复了它:

Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.LoadedProjects.FirstOrDefault(d => d.FullPath == projectFilePath) ??
                Microsoft.Build.Evaluation.Project.FromFile(projectFilePath, new ProjectOptions())

我在用 git 切换分支时经常遇到这个问题。我发现如果我 "touch ZFSin.vcxproj.filters" -(项目过滤器文件)我可以右键单击加载失败的项目和 "reload"。没有清理项目,也没有重新启动 VS2017。 (Touch 是一个只更新文件时间戳的命令)。

当解决方案在项目路径和其他路径中使用环境变量时,我遇到了这个问题。我认为它期望找到 %var1%\proj.vcxproj%var2%\proj.vcxproj ,但是 %var1%%var2% 具有相同的值。

在我的例子中,项目只有 x64 平台配置,没有 Win32 平台配置。奇怪的是,该解决方案确实具有 Win32 平台配置,并且出于某种原因,Win32 是当前的平台配置。

更改为 x64 后,我可以毫无问题地再次加载项目。为了确保安全,我还删除了 Win32 平台配置。