Visual Studio - 继续编辑后出现错误“找不到元数据文件'XYZ'”

Posted

技术标签:

【中文标题】Visual Studio - 继续编辑后出现错误“找不到元数据文件\'XYZ\'”【英文标题】:Visual studio - getting error "Metadata file 'XYZ' could not be found" after edit continueVisual Studio - 继续编辑后出现错误“找不到元数据文件'XYZ'” 【发布时间】:2013-12-27 18:09:39 【问题描述】:

我偶然发现了一个非常烦人的问题。 当我调试我的软件时,一切运行正常,但如果我遇到断点并编辑代码,当我尝试继续运行时,我会收到错误:Metadata file 'XYZ' could not be found

看了一会儿,我发现了一些similar issues,但它们都是关于构建失败的,这不是我的情况(这仅在编辑继续后才会发生)。

到目前为止我所尝试的:

我的代码正在编译和运行。 我清理了解决方案并重新启动了 VS。 我确保正在为我正在运行的配置(在配置管理器中)构建丢失文件的项目。 我手动构建了丢失文件的项目。

一些额外的信息

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

有什么想法吗?

【问题讨论】:

通过重置项目依赖项对许多人进行潜在的快速修复 - 请参阅下面的答案:***.com/a/34596007/2284031 ***.com/a/17723774/1724702 在我的例子中,一个编译器错误隐藏在几十个 Metadata file could not be found 错误的大海捞针中。 这能回答你的问题吗? Metadata file '.dll' could not be found 【参考方案1】:

最终解决问题的是:

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

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

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

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

【讨论】:

我必须这样做,但需要额外的步骤。因此,我的启动项目在解决方案中引用了其他类库/dll 项目。我必须单独清理每个并重建,但随后还必须删除并重新添加每个引用。这似乎是 VS 2013 的特定问题。在 2012 年或 2010 年,我从来没有做过这样的事情。 @Avi,tnx!我不得不在所有项目上运行三次清理和重建......但最终它成功了。 我只需要在解决方案清理后自行清理包含错误消息引用的文件的项目即可解决此问题。 是的...我有将近 70 个项目 - 不这样做 @Ben,你可以全选,所有 70 个项目,然后排除那些失败的项目。清理并构建选择,然后清理并构建剩余的项目。【参考方案2】:

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

重置项目依赖很容易 -

    选择所有项目并右键卸载 选择所有项目并右键重新加载 重建解决方案

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

【讨论】:

实际上@Ben Wilde,每次我在 git 中获得一个分支时,我都必须这样做。您是否找到了永久的解决方案? 有时升级 Visual Studio 可以防止问题再次发生。【参考方案3】:

一个可能的原因可能是您已将某些项目(在解决方案中)升级到更高版本,例如从 .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【参考方案4】:

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

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

    清洁整个解决方案 右键单击解决方案中的每个项目,转到“属性”并使默认命名空间以及默认程序集名称与代码中的相同(即类名之前的命名空间) 通过浏览器检查每个项目的文件夹名称(您的项目解决方案所在的位置)。如果与您的项目名称不匹配,请使其与项目名称相似(如 步骤 2)。 从每个项目中删除与另一个相同解决方案相关的所有引用,然后重新添加。 在您的项目解决方案文件夹中,您将找到 Visual c# 项目文件。右键单击并使用记事本打开。在您的初始行中,您会找到 每个项目 的行,如下所示:

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

再次检查文件夹名称(我以粗体突出显示)并使其与您在第 2 步中所做的相似。

    再次清理整个解决方案

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

【讨论】:

在 Visual Studio 2013 中遇到此问题,第 4 步对我有用! 我打开了 .csproj 文件并删除了对丢失的元数据文件的所有用法/引用,然后重新安装它并且它工作了!【参考方案5】:

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

【讨论】:

这里一样,除了一个项目之外,所有项目都是相同的版本! 感谢慢跑记忆 ;-) 这很容易被忽视,把一个送进兔子洞…… 谢谢,这实际上对 med 有帮助。在没有运气的情况下尝试了前两种解决方案。【参考方案6】:

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

右击解决方案,勾选Project Dependencies,Project Build Order也应该会根据已经设置的依赖而改变。

【讨论】:

您可以从那里更改项目的构建顺序。有时依赖项不同步。【参考方案7】:

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

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

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

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

【讨论】:

【参考方案8】:

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

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

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

【讨论】:

【参考方案9】:

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

第 (1) 节:

一般解决方案:

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

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

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

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

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

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

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

检查丢失的.dll的路径:

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

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

【讨论】:

【参考方案10】:

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

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

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

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

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

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

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

(*) 如果选项 Visual Studio > 工具菜单 > 选项 > 数据库工具 > O/R设计器 > 名称的多元化开启,一些SQLMETALl代码生成器会在一些生成的表类的末尾添加一个“s”字母,虽然表没有“s”后缀在目标数据库上。更多信息请参考http://msdn.microsoft.com/en-us/library/bb386987(v=vs.110).aspx

希望对你有帮助!

【讨论】:

感谢您的评论,但我没有使用任何数据库代码生成工具。我确实发布了解决问题的方法。但谁知道呢,您的回答可能会对 Google 员工有所帮助…… @Julio 你的回答帮助了我。我过去曾遭受过这种痛苦,忘记了解决方法是什么。我遇到了你对这个问题的回答,虽然不是我的确切情况,但足以触发我的记忆。我首先使用 Entity Framework db 并打开复数形式,但我不时遇到这个问题,因为我的一个表有一个复数名称,而其他所有表都是单数。【参考方案11】:

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

【讨论】:

【参考方案12】:

我的 5 美分。

这个问题是在解决方案广泛清理之后开始的。

我设法通过在以下位置设置活动解决方案配置来解决问题:Build -> Configuration manager to release。然后构建并重新设置它以再次调试。之后构建成功。

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:

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

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

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

【讨论】:

【参考方案15】:

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

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

【讨论】:

【参考方案16】:

我有这个并设法使用这个 SO 答案修复它: Metadata file '.dll' could not be found

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

【讨论】:

【参考方案17】:

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

【讨论】:

【参考方案18】:

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

【讨论】:

【参考方案19】:

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

【讨论】:

这不是真的。如果是这样,项目将无法编译和运行,但问题出现在运行时。另外,正如我提到的My code is compiling and running. 我阅读了第 16 条评论,并在我挣扎了一段时间后关注了它。幸运的是,我意识到一个名为 PDIAPI 的 dll 项目由于代码错误而失败,因此必须更正它。编译成功后,我编译了引用的项目。它给了我成功。我认为这也可以帮助其他人。【参考方案20】:

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

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

【讨论】:

【参考方案21】:

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

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

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

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

【讨论】:

【参考方案22】:

我遇到了同样的问题。在我的情况下,我错误地将所有项目与使用 main 方法作为控制台应用程序的项目分开。

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

【讨论】:

【参考方案23】:

这件事发生在我身上,因为我在命名空间中有一个奇怪的冲突: 我有 装配A 带命名空间 AssemblyA.ParentNamespace 女巫定义ClassA 并在同一个程序集中另一个名称空间 AssemblyA.ParentNamespace.ChildNamespace 女巫定义了不同的ClassA(但名称相同)

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

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

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

【讨论】:

【参考方案24】:

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

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

【讨论】:

【参考方案25】:

我也有这个问题。

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

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

我通过在构建输出窗口中查找哪些类被复制来解决了这个问题。

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

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

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

【讨论】:

我也遇到过——我通过添加参数更改了类中方法的签名,给它一个默认值但没有更新接口。【参考方案26】:

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

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

等空格

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

这解决了我的问题。

【讨论】:

【参考方案27】:

我也有同样的问题。

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

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

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

【讨论】:

以上是关于Visual Studio - 继续编辑后出现错误“找不到元数据文件'XYZ'”的主要内容,如果未能解决你的问题,请参考以下文章

用于编辑和继续的 Visual Studio 快捷键:暂停、(编译)然后再次运行

visual studio 2012 启动出现如下错误,怎么处理

Visual Studio 2013 编辑并继续不起作用

关于Visual studio出现错误的问题!!!

安装 Visual Studio 2010 后出现错误 C1189

visual studio 2008 安装过程中出现1330错误