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


76

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

环顾了一会后,我发现了一些类似的问题,但是它们都与构建失败有关,这不是我的情况(这种情况仅在继续编辑后才会发生)。

到目前为止我尝试过的是:

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

一些额外的信息

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

有任何想法吗?


通过重置项目依赖关系,可以解决许多潜在问题的快速解决方案-请参见下面的答案:stackoverflow.com/a/34596007/2284031
Ben Wilde


1
就我而言,一个编译器错误隐藏在几十个Metadata file could not be found错误的大海捞针中。
Hammer

Answers:


109

最终解决问题的是:

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

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

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

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


10
我必须这样做,但要多做一步。因此,我的启动项目在解决方案中引用了其他类库/ dll项目。我必须分别清洁每个并重建,但随后还必须删除并重新添加每个参考。这似乎是VS 2013的特定问题。我从没在2012年或2010
做过

@ Avi,TNX!我不得不在所有项目上进行三次清理和重建工作……但是最终成功了。
Joezer 2014年

在解决此问题的解决方案后,我只需要清理包含错误消息所引用文件的项目即可。
adamdc78

5
是的...我有将近70个项目-不这样做
Ben Wilde

@Ben,您可以选择所有这些项目,所有70个项目,然后排除失败的项目。清理并构建选择,然后清除并构建其余项目。
user3752281 '02

46

据我所知,这是由于任何原因导致项目依赖关系混乱(尽管所有项目间引用仍然完好无损)。在许多情况下,这不是代码问题。对于那些拥有多个项目的人,一次完成一个项目是不可接受的。

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

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

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


2
实际上@Ben Wilde,我每次在git中获得一个分支时都必须执行此操作。您是否找到了永久解决方案?
dalcam

有时升级Visual Studio可以防止问题再次发生。
本·王尔德

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. 在您的Project Solution文件夹中,您将找到Visual c#Project文件。右键单击并使用记事本打开。在最初的几行中,您会找到每个项目的行,如下所示:

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

再次检查Foldernames(我以粗体突出显示),使其与您在步骤2中所做的相似。

  1. 再次清洗整个溶液

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


3
在Visual Studio 2013中遇到了这个问题,第4步对我有用!
2014年

我打开了.csproj文件,并删除了丢失的元数据文件的所有用法/引用,然后重新安装它,它可以正常工作!
mattyb '19

8

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


此处相同,但除一个项目外,所有项目均为相同版本!
Stoyan Berov '16

感谢您慢跑记忆;-)这很容易被忽略,向兔子洞下发一个……
汤姆·米勒

谢谢,这实际上对医学有所帮助。在没有运气的情况下尝试了前两个解决方案。
法力值

5

尚未找到XYZ,因为尚未构建。

右键单击解决方案,然后检查“项目依赖关系”,“项目构建顺序”也应根据已设置的依赖关系进行更改。


在这里,您可以更改项目的构建顺序。有时,依赖项不同步。
卡洛斯·托莱多

4

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

要找到此文件,请关闭您的Virsual Studio,然后从项目内的文件资源管理器中搜索.suo。

删除.suo文件

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

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


3

好吧,我的答案不仅是所有解决方案的摘要,还提供了更多的解决方案。

第(1)节:

一般解决方案:

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

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

重新启动VS,然后再次尝试构建。

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

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

建立订单和项目依存关系:

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

检查缺少的.dll的路径:

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

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


3

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

我愚弄了构建命令,没有构建命令,引用了调试dll(它们是手动编译的)...什么都没用,直到我发现编译整个解决方案时这些错误并没有显示出来!!!

有时,似乎在编译时,编译器会因某些错误而退出...我以前已经看到过,在解决问题之后,后续编译会显示新错误。我不知道为什么会发生这种情况,而我遇到这些问题的情况很少见。但是,当您确实有这样的人时,试图找出正在发生的事情确实很痛苦。祝好运!


2

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

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

就我而言,我注意到一些旧的复数(*)表名(默认情况下,SQLMETAL在表名末尾添加一个“ s ”字母)表引用了SQLMETAL生成的类。

因为,我最近有残疾的名字多元化,regerating一些数据库相关类后,他们中的一些失去了他们的“小号”前缀。因此,对受影响的表类的所有引用均无效。出于这个原因,我有几个编译错误,如下所示:

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

如您所知,我只是为了防止汇编而出错。那就是缺少的组件可以链接到相关程序集,从而导致原始的“找不到元数据文件'XYZ'”

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

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

希望能帮助到你!


1
感谢您的评论,但是我没有使用任何数据库代码生成工具。我确实发布了解决该问题的方法。但是谁知道,您的答案可能会帮助Google员工...
Avi Turner 2014年

@Julio您的回答对我有所帮助。我过去曾遭受这种痛苦,却忘记了解决方法。我遇到了您对这个问题的回答,虽然不是我的确切情况,但这足以触发我的记忆。我首先使用Entity Framework db并启用了复数形式,并且不时遇到此问题,因为我的一个表具有复数名称,而所有其他表均为单数。
user1843640 2014年

2

我遇到了这个错误。我遵循了这里的所有解决方案,但没有任何效果。我正在使用Visual Studio 2013专业版。我无法使各个项目的重建工作正常进行,最后我发现参考中存在循环依赖关系。通常,Visual Studio会做得很好,它会警告您是否要添加对引用的内容的引用,但由于某种原因,本例中没有。我添加了对一个项目的引用,该引用引用了我正在从事的项目-并且它接受了该项目。VS bug也许?


2

我的5美分。

解决方案广泛后,此问题开始。

通过在“构建”->“配置管理器”中设置“活动解决方案”配置,我设法解决了该问题。然后构建并将其设置回再次调试。之后构建成功。


2

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


2

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

我按照Avi Turner的好答案整理了所有内容。

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


1

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

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



1

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


0

对于新版本,可能是未安装某些依赖项。对我来说是Crystal Reports。


0

当一个项目dll发生故障并且由多个项目引用时,就会发生这种情况。因此,首先修复它,然后建立个人。


那是不对的。如果是这样,项目将无法编译和运行,但问题会在运行时出现。另外,我已经提到My code is compiling and running.
Avi Turner

我读了评论16,并在一段时间内苦苦挣扎。幸运的是,我意识到一个名为PDIAPI的dll项目由于错误的代码而失败,因此必须对其进行更正。成功编译后,我编译了参考项目。它给了我成功。我认为这也可以帮助其他人。
Muzammil Tamboli 2014年

0

我遇到了这个问题,它是在将我们的解决方案作为一个新项目导入到TFS之后才开始的。

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


0

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

对我来说,故事是我无意间在数千个c#类文件中更改了一小段代码,然后尝试重建解决方案。就像您可以想象的那样,我最终得到40多个元数据文件丢失错误,其中有1个编译错误-我没有仔细检查,纯粹是认为所有错误都是相同的!

经过4个小时的搜索,然后不小心仔细检查了我的错误列表,我发现愚蠢的代码错误,对其进行了修复,编译,然后错误消失了。

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


0

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

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


0

这是发生在我身上的原因,因为我在名称空间中发生了奇怪的冲突:我的AssemblyA具有名称空间AssemblyA.ParentNamespace巫婆定义了ClassA,而在同一个程序集中另一个名称是AssemblyA.ParentNamespace.ChildNamespace巫婆定义了一个不同的ClassA(但带有一样的名字)

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

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

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


0

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

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


0

我也有这个问题。

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

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

我通过在构建输出窗口中查找哪些重复的类来解决此问题。

然后,我将右键单击类名称,然后单击“转到定义”。

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

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


我也遇到了-我通过添加参数更改了类中方法的签名,给它提供了默认值,但没有更新接口。
MarkD

0

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

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

我删除了它,再次克隆了它,并确保其路径中没有空格,例如C:/ repos / MY_PROJECT_NAME / ...

那解决了我的问题。


0

我也有同样的问题。

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

我更改了上一个活动并进行了重建,它可以正常工作。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.