Visual Studio - 在编辑并继续后出现错误 "无法找到元数据文件 'XYZ'"

79
我遇到了一个非常烦人的问题。
当我调试软件时,一切都运行正常,但如果我打断点并编辑代码,当我尝试继续运行时,就会出现以下错误:
找不到元数据文件'XYZ'

在寻找了一段时间后,我找到了一些类似问题,但它们都涉及构建失败,而这不是我的情况(这仅在编辑-继续后发生)。

我已经尝试过:

  • 我的代码编译和运行都没有问题。
  • 我清理了解决方案并重新启动了VS。
  • 我确保正在为我运行的配置构建缺少文件的项目(在“配置管理器”中)。
  • 我手动构建了缺失文件的项目。

一些额外信息:

  • 无论我更改什么,都会收到相同的错误(更改与丢失的文件无关)。
  • 这也会在暂停和继续时发生(不仅是断点)
  • 我使用自定义配置(配置管理器...)运行该项目。 当我使用默认的Debug配置运行它时,不会发生错误。

有任何想法吗?


可能的快速解决方案是通过重置项目依赖项 - 请参见下面的答案:https://dev59.com/Z2Ij5IYBdhLWcg3wOCyS#34596007 - Ben Wilde
https://dev59.com/uHM_5IYBdhLWcg3wUxjF#17723774 - Sachin Joseph
1
在我的情况下,一个编译器错误隐藏在几十个“找不到元数据文件”的错误堆栈中。 - Codes with Hammer
这个回答解决了你的问题吗?元数据文件“ .dll”无法找到 - Julio Nobre
27个回答

111

最终解决问题的方法是:

  1. 逐个清理每个项目 (右键点击> 清理).
  2. 逐个重建每个项目 (右键点击> 重建).
  3. 重建启动项目。

我猜可能由于某种原因,仅清理解决方案与逐个清理每个项目具有不同的效果。

编辑:
根据@maplemale的评论,有时还需要删除并重新添加每个引用。

更新2019年:
过去,这个问题得到了很多关注,但似乎自VS 2017发布以来,它得到了更少的关注。
因此,另一个建议是 - 升级到更新的VS版本(>= 2017),除其他新功能外,该问题也将被解决。


10
我必须这样做,但是需要多一步。我的创业项目与解决方案中的其他类库/dll项目有所关联。我不但需要逐个清理并重新构建每一个项目,还需要移除并重新添加每一个引用。这似乎是VS 2013特定的问题,在2012或2010中从未遇到过。 - maplemale
5
是的...我有近70个项目 - 不做这个。 - Ben Wilde
@Ben,你可以选择所有的70个项目,然后排除失败的项目。清理并构建所选内容,然后清理并构建剩余的项目。 - user3752281
通常这种情况发生在我打开多个Visual Studio实例时。清理和重建项目有所帮助,但是对我来说,大多数情况下重新启动VS就可以解决问题。 - mitaka
你还应该检查那些未包含在你的解决方案中或者已经包含但是找不到的文件。当我合并两个分支时,我遇到了这个问题,我认为我意外地使用了错误的选项来解决.csproj冲突。当我将所有缺失的文件都包含进来,并从解决方案中删除不存在的文件(右键单击文件,然后加载/卸载到项目中),错误就消失了。 - MerlinK
显示剩余5条评论

47
据我所知,这种情况发生的原因是项目依赖关系出现问题(而所有项目之间的引用仍然完好无损)。在许多情况下,这不是代码问题。对于那些拥有多个项目的人来说,逐个检查它们是不可接受的。
重置项目依赖关系很容易:
1.选择所有项目,右键卸载 2.选择所有项目,右键重新加载 3.重建解决方案
对于那些在代码或其他问题上遇到此问题的人,您首先需要解决该问题。

2
其实@Ben Wilde,我每次在git中获取一个分支时都必须这样做。你找到了永久解决方案吗? - dalcam
有时升级 Visual Studio 可以避免问题再次出现。 - Ben Wilde

15

可能的原因之一是您已将某些项目(在解决方案中)升级到更高版本,例如从.NET 4.0升级到4.5。这在我的情况下发生了,当我在VS 2013中打开解决方案时,(该解决方案最初是使用VS 2010和.NET 4.0创建的)。当我在VS 2013中打开后,我的C ++项目更新为.NET 4.5,开始出现问题。


这正是我所遇到的问题。唯一的区别是我在VS 2015中从.NET 4.5升级到了4.6.1。 - Alvaro Pereira

11

通常,这种错误是由人为的错误引起的,例如我们以某种不当的方式更改命名空间,或者从资源管理器更改当前项目的文件夹名称等,在这种情况下编译器有时无法检测到。

我遇到了同样的错误,为了解决这个问题,我尝试了几个步骤。请按照以下所有步骤进行:

  1. 清理整个解决方案
  2. 右键单击解决方案中的每个项目,转到属性,并将默认命名空间以及默认程序集名称设置为代码中相同的名称(即类名之前的命名空间)
  3. 通过资源管理器(您的项目解决方案所在的位置)检查每个项目的文件夹名称。如果与项目名称不匹配,请使其类似于它们(如步骤2)。
  4. 从与同一解决方案相关的每个项目中删除所有引用,然后再次添加。
  5. 在您的项目解决方案文件夹中,您将找到Visual C#项目文件。右键单击并使用记事本打开。在您的最初行中,您会发现像下面这样的每个项目的四行:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "**Client**", "**Client** \ **Client**.csproj", "{4503E259-0E3B-414A-9074-F251684322A5}" EndProject

再次检查文件夹名称(我在步骤2中加粗了),并将其设置为与步骤2中所做的相似。

  1. 再次清理整个解决方案

  2. 构建解决方案(如果不起作用,请在再次清理后单独构建)


3
我在使用Visual Studio 2013遇到了这个问题,而第四步对我有用! - Michael
我打开了.csproj文件并删除了所有对缺失元数据文件的使用/引用,然后重新安装它,它就可以工作了! - mattyb

8

确保所有依赖项目使用相同的 .Net Framework 版本。我曾经遇到过一个类似的问题,由于一个依赖项目使用了 4.5.1 版本,而其他所有项目都使用了 4.5 版本,导致出现了问题。将该项目从 4.5.1 版本更改为 4.5 版本并重新构建解决方案,问题就得到了解决。


这里也一样,除了一个项目之外,所有项目都是相同的版本! - Stoyan Berov
谢谢你唤醒我的记忆;-) 这很容易被忽视,会让人陷入兔子洞... - Tom Miller
谢谢,这个真的对我有帮助。尝试了前面两个解决方案都没有成功。 - Mana

5

由于尚未构建,因此无法找到XYZ....

右键单击解决方案并检查项目依赖项,项目构建顺序也应根据设置的依赖项而更改。


从那里,您可以更改项目的构建顺序。有时依赖关系不同步。 - Carlos Toledo

4
我有这个问题已经几天了!我尝试了上面的所有方法,但问题仍然会反复出现。当显示此消息时,它可能意味着“您的解决方案中的一个或多个项目未能干净地编译”,因此文件的元数据从未被写入。但在我的情况下,我没有看到任何其他编译器错误!!!我一直在努力尝试手动编译每个解决方案,只有在VS2012实际显示了一些以前未曾见过的编译器错误后,这个问题才消失了。
我尝试了构建顺序、不使用构建顺序、引用调试dll(手动编译的dll)......什么都没用,直到我发现这些错误在编译整个解决方案时没有显示出来!!
有时,在编译时,似乎编译器会退出一些错误......我曾经见过这种情况,在修复问题后,后续的编译会显示新的错误。我不知道为什么会发生这种情况,而且这种情况对我来说相当罕见。然而,当你像这样遇到这些问题时,想要找出问题所在真是太痛苦了。祝好运!

4
唯一有效的方法是删除解决方案用户选项(.suo)文件。请注意,这是一个隐藏文件。
要定位此文件,请关闭您的Visual Studio并在项目内的文件资源管理器中搜索.suo。

Delete the .suo file

PS:当您重建项目时,将再次创建一个新的 .suo 文件,希望这个新创建的文件不会给您带来问题。

我希望这可以帮助某人摆脱这个烦人的错误 :).


3

好的,我的回答不仅仅是所有解决方案的总结,而且还提供了更多内容。

第一部分:

通常的解决方案:

我遇到了4个这种错误(“找不到元数据文件”),以及一个错误,显示“源文件无法打开(未指定错误)”。

我试图摆脱“找不到元数据文件”的错误。为此,我阅读了许多帖子、博客等,并发现以下解决方案可能有效(在此概述):

重新启动 VS 并尝试再次构建。

转到“解决方案资源管理器”。右键单击解决方案。转到属性。转到“配置管理器”。检查“生成”下面的复选框是否被选中。如果有任何一个或全部未被选中,则选中它们,然后尝试再次构建。

如果上述解决方案都不起作用,则按照步骤2中提到的顺序进行操作,即使所有复选框都被选中,请取消选中它们,然后重新选中并尝试再次构建。

构建顺序和项目依赖项:

转到“解决方案资源管理器”。右键单击解决方案。转到“项目依赖项...”。您将看到两个选项卡:“依赖项”和“构建顺序”。这个构建顺序是解决方案的构建顺序。检查项目依赖项和构建顺序,以验证某个项目(比如“project1”)是否依赖于其他项目(比如“project2”),并且试图在其之前构建(project2)。这可能是错误的原因。

检查缺失的 .dll 的路径:

检查缺失的 .dll 的路径。如果路径包含空格或任何其他无效路径字符,请将其删除并尝试再次构建。

如果这是原因,则调整构建顺序。


2
Visual Studio 2019 Community 16.3.10
我在Release版本编译时遇到了类似的问题,但Debug版本没有任何问题。原来这个问题是由OneDrive引起的。很可能其他备份驱动器或云服务也会出现类似的问题。
我按照Avi Turner的好答案进行了清理。
此外,我手动从我的OneDrive文件夹中删除了\obj\Release文件夹,并使用浏览器登录到OneDrive并在那里删除了该文件夹,以防止OneDrive在编译时重新加载云端版本。
之后重新构建,一切正常工作。

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