77

I have stumbled into an issue that is really annoying.
When I debug my software, everything runs OK, but if I hit a breakpoint and edit the code, when I try to continue running I get an error:
Metadata file 'XYZ' could not be found

After looking around for a while, I found some a similar issues, but they were all regarding a build failure, which is not my case (this happens only after edit-continue).

What I have tried so far:

  • My code is compiling and running.
  • I cleaned the solution and restarted VS.
  • I made sure that the missing file's project is being build for the configuration I am running (in configuration manager).
  • I manually built the missing file's project.

Some extra info:

  • It does not matter what I change, still get the same error (the change is not related to the missing file).
  • This happens also when I pause and continue (not only breakpoints)
  • I am running the project using a custom configuration (configuration manager...). When I run it using the default Debug configuration the error does not occur.

Any ideas?

4

27 回答 27

109

最终解决问题的是:

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

我猜出于某种原因,仅清洁解决方案与单独清洁每个项目的效果不同。

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

2019 年更新:
这个问题过去有很多流量,但似乎自从 VS 2017 发布以来,它得到的关注少了很多。
所以另一个建议是 - 更新到较新版本的 VS (>= 2017) 以及其他新功能,这个问题也将得到解决

于 2013-12-19T22:17:23.147 回答
46

据我所知,当项目依赖关系因任何原因而混乱时,就会发生这种情况(而所有项目间引用仍然完好无损)。在许多情况下,这不是代码问题。对于那些拥有多个项目的人来说,一次完成一个是不可接受的。

重置项目依赖关系很容易 -

  1. 选择所有项目并右键单击卸载
  2. 选择所有项目并右键单击重新加载
  3. 重建解决方案

对于那些在代码中存在问题或导致此问题的其他问题的人,您显然必须首先解决该问题。

于 2016-01-04T16:56:07.320 回答
15

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

于 2014-06-12T12:14:13.707 回答
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中所做的。

  1. 再次清洁整个溶液

  2. 构建解决方案(如果不起作用,请在再次清洁后尝试构建个体)

于 2014-08-27T09:13:38.587 回答
8

确保所有依赖项目都使用相同的 .Net Framework 版本。我遇到了由使用 4.5.1 的依赖项目引起的相同问题,而所有其他项目都使用 4.5。将项目从 4.5.1 更改为 4.5 并重建我的解决方案为我解决了这个问题。

于 2015-12-17T17:14:23.800 回答
5

无法找到 XYZ,因为尚未构建....

右键单击解决方案并选中项目依赖项,项目构建顺序也应根据已设置的依赖项进行更改。

于 2014-11-30T19:57:54.350 回答
4

我有这个问题好几天了!我尝试了上面所有的东西,但问题不断出现。当显示此消息时,它可能具有“您的解决方案中的一个或多个项目未完全编译”的含义,因此该文件的元数据从未被写入。但就我而言,我没有看到任何其他编译器错误!!!我一直在努力尝试手动编译每个解决方案,只有在让 VS2012 真正揭示了一些我以前没有见过的编译器错误之后,这个问题才消失了。

我愚弄了构建命令,没有构建命令,引用调试 dll(手动编译)......似乎没有任何工作,直到我发现编译整个解决方案时没有出现这些错误!!!!

有时,在编译时,编译器似乎会因某些错误而退出......我过去曾见过这种情况,在修复问题后,后续编译会显示新错误。我不知道为什么会这样,而且我很少遇到这些问题。然而,当你确实拥有这样的它们时,试图找出发生了什么真的很痛苦。祝你好运!

于 2014-08-24T04:38:28.820 回答
4

唯一对我有用的是删除解决方案用户选项 ( .suo) 文件。请注意,这是一个隐藏文件。

要找到此文件,请关闭您的 Virsual 工作室并从项目的文件资源管理器中搜索 .suo。

删除 .suo 文件

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

我希望这可以帮助某人摆脱这个令人讨厌的错误:)。

于 2017-08-23T14:15:20.570 回答
3

好吧,我的回答不仅仅是对所有解决方案的总结,而且提供的还不止这些。

第 (1) 节:

一般解决方案:

我有 4 个此类错误(“找不到元数据文件”)以及 1 个错误说“无法打开源文件('未指定错误')”。

我试图摆脱“找不到元数据文件”错误。为此,我阅读了许多帖子、博客等,发现这些解决方案可能是有效的(在这里总结它们):

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

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

如果上述解决方案不起作用,则按照上面步骤 2 中提到的顺序,即使所有复选框都已选中,也不要选中它们,再次选中并尝试再次构建。

构建顺序和项目依赖关系:

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

检查丢失的 .dll 的路径:

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

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

于 2016-03-30T14:09:53.753 回答
2

我的 5 美分。

此问题在解决方案广泛清洁后开始。

我设法通过在以下位置设置活动解决方案配置来解决问题:构建 - > 配置管理器以发布。然后构建并重新设置它以再次调试。之后构建成功。

于 2014-12-08T11:02:42.597 回答
2

我出现了这个错误。我在这里遵循了所有解决方案,但没有任何效果。我使用的是 Visual Studio 2013 Professional。我无法让单个项目重建工作,我终于发现我的引用中有一个循环依赖。如果您添加对引用回来的内容的引用,Visual Studio 通常会很好地警告您,但由于某种原因,它在这种情况下没有。我添加了对引用我正在从事的项目的项目的引用 - 它接受了它。VS错误也许?

于 2014-11-20T16:34:31.613 回答
2

您是否在项目中使用 SQLMETAL 等数据库代码生成工具?

如果是这样,您可能会面临多元化到非多元化的过渡问题。

在我的例子中,我注意到一些旧的复数 (*) 表名(SQLMETAL 默认在其末尾添加一个“ s ”字母)对 SQLMETAL 生成的类的表引用。

因为,我最近禁用了名称的多元化,在重新调整了一些与数据库相关的类之后,其中一些失去了它们的“ s ”前缀。因此,对受影响的表类的所有引用都变得无效。出于这个原因,我有几个编译错误,如下所示:

“xxxx”不包含“TableNames”的定义,并且找不到接受“yyyy”类型的第一个参数的扩展方法“TableNames”(您是否缺少 using 指令或程序集引用?)

如您所知,我只接受错误以防止程序集编译。那就是缺少的程序集可链接到依赖程序集,导致原始“找不到元数据文件'XYZ'”

在手动修复受影响的类表引用到它们的当前名称(未复数)之后,我终于能够让我的项目恢复活力!

(*) 如果选项 Visual Studio > Tools menu > Options > Database Tools > O/R Designer > Pluralization of names被启用,一些 SQLMETALl 代码生成器会在一些生成的表类的末尾添加一个“ s ”字母,尽管表有目标数据库上没有“s”后缀。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb386987(v=vs.110).aspx

希望能帮助到你!

于 2014-05-14T17:15:27.687 回答
2

Visual Studio 2019 Community 16.3.10
我在发布版本时遇到了类似的问题。调试版本正在编译,没有任何问题。原来问题是由 OneDrive 引起的。任何备份驱动器或云服务很可能会遇到类似的问题。

我按照 Avi Turner 的出色回答清理了所有东西。

此外,我从我的 OneDrive 文件夹中手动删除了 \obj\Release 文件夹,并使用浏览器登录到 OneDrive 并删除了那里的文件夹,以防止 OneDrive 在编译时重新加载云版本。
之后重建,一切正常。

于 2019-12-03T11:01:34.830 回答
2

关闭 VS,从 Visual Studio 外部找到并删除“包”文件夹。重新启动 VS 并构建 -> 重新安装所有依赖项

于 2016-07-12T10:02:05.830 回答
1

发生这种情况是因为文件夹名称和命名空间名称中的名称不同。如果您以某个名称创建名称空间,然后您将其重命名,则名称空间本身将具有旧名称。并且编译将采用旧路径查找.dlland.exe文件。为了避免这种.csproj情况,使用文本文件打开每个命名空间的文件,并在文件中找到旧路径。

删除它,清理并重建解决方案。这对我有用。我花了一整天的时间来解决这个问题。

于 2014-09-29T14:08:43.680 回答
1

我刚刚遇到了这个问题,经过一个小时的折腾,我意识到我已经在我的产品中添加了一个与我的Linq-To-Sql类同名的aspx文件。 “队列”所在的类和页面。 将页面更改为QueueMgr.aspx,一切正常。

于 2017-08-15T19:06:00.280 回答
1

我有这个并设法使用这个答案修复它: 找不到元数据文件'.dll'

我不得不取消选中所有框,单击应用,重新启用所有复选框,然后再次单击应用,但它解决了问题。

于 2017-04-18T09:04:31.777 回答
0

对于新版本,可能是未安装某些依赖项。对我来说,这是水晶报表。

于 2014-09-26T10:03:41.413 回答
0

我遇到了这个问题,它是在将我们的解决方案作为新项目导入 TFS 后开始的。我遇到了这个主题,并从您的回答中找到了一些灵​​感的快速解决方案。

我需要做的就是重建据称丢失了元数据文件的项目,瞧,问题解决了。

于 2014-12-11T12:26:25.110 回答
0

当一个项目 dll 失败并且被项目数量引用时,就会发生这种情况。所以首先修复它,然后再建立个人。

于 2014-11-27T09:27:25.893 回答
0

还有另一个愚蠢的原因,您应该耐心检查......因为我在浪费了 4 小时寻找答案后想到:

对我来说,故事是我不小心在数千个 c# 类文件中更改了一小行代码,然后尝试重建解决方案。你可以想象,我最终发现了 40 多个元数据文件丢失错误,其中有 1 个编译错误——我没有仔细检查,纯粹是认为所有错误都是一样的!

经过 4 小时的搜索,然后意外地仔细检查了我的错误列表,我发现了愚蠢的代码错误,修复它,编译,然后错误消失了。

对您的问题不是一个很好的答案,但希望我的情况与您的情况不同。

于 2015-02-23T10:49:09.687 回答
0

我有同样的问题。在我的情况下,我错误地将所有项目与项目分开,主要方法是控制台应用程序。

为了解决这个问题,我去了除了具有主要功能和右键单击>属性>输出类型>类库的项目之外的每个项目

于 2015-11-06T05:29:00.377 回答
0

一位同事遇到了这个问题,原因是我们无法理解。最终我们意识到项目目录(以及 NuGet 包的路径)包含%20(感谢一些不应命名的 Git gui 工具)并且错误消息显示编译器正在寻找一个看起来非常相似的路径,但是一个这不得不%20,而是一个空间。显然,构建系统中的某处对本地文件系统路径执行 HTML 解码。

重命名工作副本目录,一切都开始工作了。

于 2019-04-15T22:26:46.763 回答
0

它发生在我身上是因为我在命名空间中有一个奇怪的冲突:我有 AssemblyA 与命名空间 AssemblyA.ParentNamespace 女巫定义了 ClassA 并且在同一个程序集中另一个名称为 AssemblyA.ParentNamespace.ChildNamespace 女巫定义了不同的 ClassA(但与一样的名字)

然后我在 AssemblyA.ParentNamespace IInterfaceB 女巫有一个方法,一开始返回 IEnumerable 和 ClassB 女巫实现 IInterfaceB

我后来修改了 ClassB 中的方法以返回 IEnumerable 但我忘记更新 IInterfaceB 定义,所以那里的方法仍然返回 IEnumerable 有趣的事实是,如果我全部重建,解决方案仍然可以编译,但是测试女巫指的是 AssemblyA 没有工作并返回“找不到元数据文件”错误。

更新 InterfaceB 以正确返回 IEnumerable,因为它的实现者 ClassB 确实解决了问题,不幸的是错误消息含糊不清,而且编译工作的事实让我认为编译器中可能有一些需要修复的东西

于 2016-09-05T12:58:35.623 回答
0

确保项目路径中没有空格...

我正在将 Windows 10 与 Visual Studio Community 2019 一起使用,并且我正在克隆一个多项目解决方案,因为它来自 GIT 存储库。我在解决方案中的所有其他依赖项中遇到此错误以及E_POINTER错误。它的路径继承自 GIT,有 C:/repos/ MY PROJECT NAME / ...

我删除它,再次克隆它并确保它的路径不包含空格,如 C:/repos/ MY_PROJECT_NAME / ...

这解决了我的问题。

于 2020-09-03T12:39:05.043 回答
0

我也有这个问题。

它是在我在我的项目中整理了一个小文件夹之后开始的。然后我尝试编译并得到许多重复的类错误。(尽管它们没有被复制。我认为链接只是不合时宜)

检查这些后,错误将全部消失,只留下“找不到元数据文件 ...debug\application.exe”错误。

我通过查看构建输出窗口以查找哪些类被重复解决了这个问题。

然后我会右键单击类名并“转到定义”。

将有两个定义可供选择,将它们都打开,第二个定义似乎会再次打开同一个文件,但是第二个定义将标识为错误源(红色下划线)。

删除文件中的所有代码并保存(这不会影响您的实际文件)。
现在应该可以正确编译。

于 2019-12-30T01:50:20.637 回答
0

我也有同样的问题。

就我而言,我最近在项目的某个地方添加了一个内部类。解决方案中的依赖项之一具有相同的类名,并且它们都被正确添加到引用中。

我改变了我上次的活动并重建,它有效。

确保您的编译器消息有效。就我而言,我从那里捕获参考错误,未在错误列表中列为错误。

于 2020-09-10T14:56:37.603 回答