Visual Studio 2012项目文件“”已被重命名或不再在解决方案中。

48
我最近将我的IDE从VS2010升级到了VS2012,但没有升级编译器,现在我遇到了解决方案中的一个问题。当我尝试构建它时,会收到以下信息:

项目文件已重命名或不再在解决方案中

当我尝试构建单独的项目时,会收到以下信息:

已经有一个构建正在进行中

我已经尝试删除和重新添加所有项目,但没有帮助。我甚至创建了一个带有完全相同项目的全新解决方案,但是当我尝试构建它时,我得到了与原始解决方案相同的错误。
我读到很多人都有类似的问题,但他们的解决方案都没有对我有用。
有一些建议是检查是否有任何项目缺少引用,但我不太确定如何去做。
我尝试删除引用并重新添加它们,但每次我尝试重新添加它们时,我都会收到相同的错误“项目文件''已被重命名或不再在解决方案中”。
如果您有任何帮助或建议,那太棒了!

1
"有一个建议是查看是否有任何项目缺失引用,但我不太确定如何去做。" - 打开每个项目中的引用节点。 - Mitch Wheat
我的建议是在您喜欢的文本编辑器中打开 .SLN 文件并进行查找。格式相当直观。 - Mike Christensen
9个回答

72

我遇到过同样的问题,通过确保每个被其他项目引用的项目都包含在解决方案中来解决了该问题。

右键单击第一个项目,选择“引用...”并确保引用下列每个项目都已包含。接下来进行下一个项目并执行相同的操作。

这解决了我的“项目文件‘’已重命名或不再在解决方案中”的问题。不确定“构建正在进行中”问题是否也适用。


3
这确实解决了问题,但我真的很讨厌这个问题...信息不够清晰,我个人更喜欢定制化的解决方案,只包括我需要处理的几个项目,这样会更整洁、快速。 - Easton L.
3
有自动化的方法吗?我的解决方案中有100多个项目。 - Lev
7
好的,找到方法了。使用msbuild从命令行构建它,错误消息将包含缺失的项目。 - Lev
在我的情况下,不是项目引用的问题,而是因为需要再次运行cmake,因为它构建的缓存已被删除。 - Sean Colombo
1
我曾经在修改项目配置时看到过这个错误,即使解决方案已经构建。因此,如果您能够触发构建,可以在“输出”窗口中查找“warning:The referenced project 'foo.vcxproj' does not exist”,这将确定您的100个项目中哪个存在错误以及缺少哪个引用。如果您无法从IDE触发构建,则可能是要在msbuild输出中搜索的相同消息。 - JDiMatteo
谢谢。原来缺失的项目是由CMake生成的ZERO_CHECK。完全忘记了。 - ulatekh

9
我可以确认_the_mantrill的情况。(发布为答案,因为这不适合作为评论。)
在我的解决方案中,Project A引用了Project B。由于某种原因,Project B的GUID发生了变化(我知道这可能会发生,但我没有调查我们的情况是什么导致的)。解决方案文件中有Project B的正确新GUID,但在Project A的项目文件中,对Project B的引用仍然具有旧的GUID。
通过在解决方案资源管理器中卸载和重新加载项目,我发现Project A导致“项目文件''已重命名或不再在解决方案中。”一旦找到,手动更新Project A项目文件中的Project B GUID即可解决问题。
细节: ProjectB.vcxproj
<PropertyGroup Label="Globals">
    <Keyword>Win32Proj</Keyword>
    <ProjectGuid>{9CF2493A-0C79-88E7-12ED-7DFAEBA8535B}</ProjectGuid>
</PropertyGroup>

过去,ProjectB的ProjectGuid曾经是{d6f1934a-905f-77ca-49c0-164b2171a0f6}。现在变成了{9CF2493A-0C79-88E7-12ED-7DFAEBA8535B}

ProjectA.vcxproj文件之前的名称被修改或已不在解决方案中,会导致出现"The project file '' has been renamed or is no longer in the solution."错误信息。

<ItemGroup>
    <ProjectReference Include="..\ProjectB\ProjectB.vcxproj">
        <Project>{d6f1934a-905f-77ca-49c0-164b2171a0f6}</Project>
    </ProjectReference>
    :
</ItemGroup>

ProjectA.vcxproj – 经过手动编辑后,现在可以正常工作:

<ItemGroup>
    <ProjectReference Include="..\ProjectB\ProjectB.vcxproj">
        <Project>{9CF2493A-0C79-88E7-12ED-7DFAEBA8535B}</Project>
    </ProjectReference>
    :
</ItemGroup>

1
这个。+1。我也一样。GUID 搞砸了。 - Martin Ba

2

2

这个问题通常是由项目版本转换器引起的。

问题在于,向解决方案中的项目引用不再存在于解决方案中(正如我所说,原因是转换或手动删除时出现问题)。

所以您需要查看所有项目引用右键单击项目 ->“ 引用...”),并检查每个引用的项目是否存在于解决方案中 - 否则将缺少的项目添加到解决方案中或删除无效修改器。

这个答案是基于一个现有的答案: https://dev59.com/f2Uq5IYBdhLWcg3wV_Ei#14722733


2
当我有两个解决方案文件针对不同的产品,但是它们有几个共同的项目时,问题似乎发生在我第一次在VS2012中打开这些VS2010项目时。当打开第一个文件时,所有的项目都被转换了。然后在加载第二个文件时出现问题,因为有些项目已经被转换了。似乎是在第一个解决方案中更新了项目引用,但是在第二个解决方案中需要更新一些项目,但使用了已经更新过的共同项目的版本。
最终,为了解决这个问题,我不得不删除并重新添加一些项目(以及项目引用),这样看来问题就解决了。此外,值得注意的是删除构建文件夹和其他临时文件(如.suo),因为某些文件的状态会影响项目引用问题(这真的让我意外)。

我最终通过以下步骤解决了这个问题:1)将VS10的*project.*proj**文件重命名为*project_2010.*proj,然后2)复制这些文件并将它们重命名为project_2012.*proj**,接着3)手动编辑VS10和VS12的解决方案文件,并将其指向适当版本的项目文件,最后4)允许它根据需要升级这些文件。 - Jesse Chisholm

1

一开始,我并不相信“确保所有引用都存在”的措施会成功,但只要执行一次就可以了。

最后,我尝试检查解决方案中的所有项目,特别是 Web 项目。发现有些项目无法使用。删除这些引用后,问题迎刃而解!


请注意,Stackoverflow仅支持英文! - Paresh Mayani

0

确保解决方案中的所有项目文件(*.vcxproj)在其中定义了匹配的 GUID,类似于以下内容:

<PropertyGroup Label="Globals">
    <ProjectGuid>{B4D8DE30-8DCC-85FC-ABFE-3ED6S9F873C0}</ProjectGuid>
</PropertyGroup>

由于某种奇怪的原因,从VS2008转换的项目没有这个问题,而VS2010坚持在每次加载解决方案时替换所有项目的GUID在解决方案文件中,但实际上从未将它们添加到项目文件中。

0

我有同样的症状,但原因和解决方法完全不同。

在从VS 2003 => 2005> => 2008 => 2010 => 2012迁移时,不知怎么地,在最后一步中 Resources.resx 文件消失了。 因此出现以下信息:

"项目文件''已重命名或不再在解决方案中。"

对我而言,它不是“项目文件”,而是“项目的文件”。 (有些人说语法不重要。)

我找到了缺少的 Resources.resx 文件,我的问题得以解决。


0

当我将一个项目复制到另一个文件夹并重新打开时,遇到了问题。

最终我通过以下方法解决了这个问题:

  1. 右键单击项目
  2. 打开引用选项
  3. 在页面中删除引用项目

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