我偶然发现了一个非常烦人的问题。
当我调试我的软件时,一切运行正常,但如果我点击断点并编辑代码,当我尝试继续运行时,我收到一个错误:
Metadata file 'XYZ' could not be found
环顾四周后,我发现了一些similar issues,但它们都是关于构建失败的,这不是我的情况(这只发生在编辑 - 继续之后)。
到目前为止我尝试了什么:
一些额外的信息:
Debug
配置运行它时,不会发生错误。有任何想法吗?
最终解决了这个问题的是:
我想由于某种原因,只是清洁解决方案与单独清理每个项目有不同的效果。
编辑: 根据@maplemale注释,似乎有时需要删除和重新添加每个引用。
更新2019年: 这个问题在过去得到了很多流量,但似乎自VS 2017发布以来,它的关注度却低得多。 所以另一个建议是 - 更新到VS的更新版本(> = 2017)以及其他新功能这个问题也将得到解决
您是否在项目中使用SQLMETAL等数据库代码生成工具?
如果是这样,您可能会遇到多元化到无人化的过渡问题。
在我的例子中,我注意到一些旧的复数(*)表名(默认情况下,SQLMETAL在其上添加了一个“s”字母)表引用了由SQLMETAL生成的类。
因为我最近禁用了多个名称,在重新编译了一些与数据库相关的类后,其中一些失去了它们的“s”前缀。因此,对受影响的表类的所有引用都变为无效。出于这个原因,我有几个编译错误,如下所示:
'xxxx'不包含'TableNames'的定义,也没有扩展方法'TableNames'可以找到'yyyy'类型的第一个参数(你是否缺少using指令或汇编引用?)
如您所知,我只接受错误以防止程序集编译。这就是缺少的assebles可以链接到依赖程序集,导致无法找到原始的“元数据文件'XYZ'”
在将受影响的类表引用手动修改为其当前名称(复数)后,我终于能够让我的项目恢复生机!
(*)如果选项Visual Studio>工具菜单>选项>数据库工具> O / R设计器>名称的多元化已启用,则某些SQLMETALl代码生成器将在某些生成的表类的末尾添加“s”字母,尽管表格具有目标数据库上没有“s”后缀。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb386987(v=vs.110).aspx
希望能帮助到你!
我的5美分。
解决方案广泛清洁后,此问题开始。
我设法通过在以下位置设置Active Solution配置来解决问题:Build - > Configuration manager to release。然后构建并将其重新设置为再次调试。之后构建成功了。
关闭VS,找到并从visual studio外部删除'packages'文件夹。重新启动VS并构建 - >重新安装所有依赖项
对于新构建,可能是某些依赖项未安装。对我来说是Crystal Reports。
这是因为文件夹名称和命名空间名称中的名称不同。如果您使用某个名称创建命名空间,稍后重命名它,则命名空间将具有旧名称本身。编译将采用旧路径找到.dll
和.exe
文件。为避免这种情况,请使用文本文件打开每个命名空间的.csproj
文件,并在文件中找到旧路径。
删除它,清理并重建解决方案。这对我有用。我花了一整天时间研究这个问题。
我出现了这个错误。我在这里遵循了所有解决方案但没有任何效果。我使用的是Visual Studio 2013 Professional。我无法让单个项目重建工作,我终于发现我的参考文献中有一个circular dependency。 Visual Studio做得非常好,通常会警告你,如果你要引用一些引用回来的东西,但由于某些原因它在这个例子中没有。我添加了对引用我正在处理的项目的项目的引用 - 它接受了它。 VS bug也许吧?
当一个项目dll失败并且由项目数引用时,就会发生这种情况。首先修复它然后构建个体。
我有这个问题,它已经开始将我们的解决方案导入到TFS作为一个新项目。我遇到了这个主题并找到了一个快速的解决方案,从你的答案中获得了一些灵感。
我需要做的就是重建那些据称丢失了元数据文件的项目,并解决了问题。
还有另外一个愚蠢的理由,你应该耐心检查......因为它在浪费4小时寻找答案后发生在我身上:
我的故事是,我不小心改变了数千个c#类文件中的一小段代码,然后尝试重建解决方案。你可以想象,我最终有40多个元数据文件丢失错误,其中有1个编译错误 - 我没有仔细检查,纯粹认为所有错误都是一样的!
经过4个小时的搜索,然后不小心双重检查我的错误列表,我发现愚蠢的代码错误,修复它,编译,然后错误消失。
对你的问题不是一个好的答案,但希望我的情况与你的不一样。
我有同样的问题。在我的情况下,我错误地将所有项目与项目的主要方法设置为控制台应用程序。
为了解决我去了除了具有main函数的项目以外的每个项目,右键单击> properites>输出类型>类库
据我所知,当项目依赖项因任何原因而被搞砸时(包括所有项目间的引用仍然完整),就会发生这种情况。在许多情况下,它不是代码问题。对于那些拥有多个项目的人来说,一次一个地进行这些项目是不可接受的。
重置项目依赖项很容易 -
对于那些在代码中遇到问题或者导致此问题的其他问题的人,您显然必须首先解决该问题。
它发生在我身上,因为我在命名空间中发生了一个奇怪的冲突:我有一个带有命名空间AssemblyA.ParentNamespace的AssemblyA定义了ClassA,并且在同一个程序集中另一个名为AssemblyA.ParentNamespace.ChildNamespace的命名空间定义了一个不同的ClassA(但是一样的名字)
然后我在AssemblyA.ParentNamespace IInterfaceB女巫有一个方法,在一开始返回IEnumerable和一个ClassB巫婆实现IInterfaceB
我后来修改了ClassB中的方法以返回IEnumerable但是我忘了更新IInterfaceB定义,所以那里的方法仍然返回IEnumerable有趣的事实是,如果我重建所有的解决方案仍然是complile,但测试女巫引用AssemblyA dids不起作用并返回“无法找到元数据文件”错误。
更新InterfaceB以正确返回IEnumerable,因为它的实现者ClassB确实解决了这个问题,遗憾的是错误消息含糊不清,而且编译工作的事实让我觉得可能在编译器中有一些东西要修复
我有这个,并设法使用这个SO答案修复它:Metadata file '.dll' could not be found
我必须取消选中所有框,单击“应用”,重新启用所有复选框,然后再次单击“应用”,但它修复了问题。
我刚刚遇到这个问题,经过一个小时的拧紧后意识到我已经在我的产品中添加了一个aspx文件,该文件与我的一个Linq-To-Sql类同名。 类和页面“队列”。 将页面更改为QueueMgr.aspx,一切都很好。
一位同事遇到了这个问题,原因就是我们。最终我们意识到项目目录(以及因此NuGet包的路径)包含%20
(谢谢,一些Git gui工具,不应该命名),错误消息显示编译器正在寻找一个非常相似的路径,但一个必须%20
,而不是一个空间。显然,构建系统中的某些东西在本地文件系统路径上执行HTML解码。
重命名工作副本目录,一切都开始工作。
一个可能的原因可能是您已将某些项目(在解决方案中)升级到更高版本,例如从.NET 4.0到4.5当我在VS 2013中打开解决方案(最初使用VS 2010和.NET 4.0创建)时,就发生了这种情况。当我在VS 2013中打开时,我的C ++项目已更新到.NET 4.5,我开始看到问题所在。
一般来说,这种错误会带来人为错误,例如我们以某种不正确的方式更改命名空间,或者从资源管理器中为当前项目等更改文件夹名称,而编译器有时无法检测到这些错误。
我遇到了同样的错误,解决了我尝试了几步的问题。请按照以下步骤操作:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "**Client**", "**Client** \ **Client**.csproj", "{4503E259-0E3B-414A-9074-F251684322A5}"
EndProject
再次检查Foldernames(我已在BOLD中突出显示)并使其与您在步骤2中执行的操作类似。
确保所有依赖项目都使用相同的.Net Framework版本。我有一个由使用4.5.1的依赖项目引起的相同问题,而所有其他人都使用4.5。将项目从4.5.1更改为4.5并重建我的解决方案为我解决了这个问题。
无法找到XYZ因为尚未构建....
右键单击解决方案并检查项目依赖项,项目构建顺序也应根据已设置的依赖项进行更改。
我好几天都有这个问题!我尝试了上面所有的东西,但问题一直在回来。当显示此消息时,它可能具有“解决方案中的一个或多个项目未完全编译”的含义,因此从未编写该文件的元数据。但在我的情况下,我没有看到任何其他编译器错误!我一直在努力尝试手动编译每个解决方案,并且只有在让VS2012真正揭示我以前没见过的编译器错误之后,这个问题才消失了。
我愚弄了构建订单,没有构建订单,引用调试dll(手动编译)... NOTHING似乎工作,直到我发现这些错误在编译整个解决方案时没有显示!
有时,在编译时,似乎编译器会出现一些错误...我在过去看到过这个问题,在修复问题之后,后续编译显示出新的错误。我不知道为什么会发生这种情况,而且我很少遇到这些问题。然而,当你有这样的情况时,试图找出正在发生的事情真的很痛苦。祝好运!
好吧,我的答案不仅仅是所有解决方案的总结,而且还提供了更多。
第(1)节:
一般解决方案:
我有4个这种错误('无法找到元数据文件')以及1错误说'源文件无法打开('未指定错误')'。
我试图摆脱'无法找到元数据文件'的错误。为此,我阅读了许多帖子,博客等,发现这些解决方案可能有效(在此汇总):
重启VS并再次尝试构建。
转到“解决方案资源管理器”。右键单击Solution。转到“属性”。转到“配置管理器”。检查是否选中了“Build”下的复选框。如果未选中任何一个或全部,请检查它们并再次尝试构建。
如果上述解决方案不起作用,则按照上面步骤2中提到的顺序进行操作,即使选中了所有复选框,也要取消选中它们,再次检查并再次尝试构建。
构建顺序和项目依赖性:
转到“解决方案资源管理器”。右键单击Solution。转到“项目依赖关系......”。您将看到2个选项卡:“依赖关系”和“构建顺序”。此构建顺序是构建解决方案的顺序。检查项目依赖项和构建顺序,以验证依赖于其他项目(比如'project2')的某个项目(比如'project1')是否正在尝试在该项目之前构建(project2)。这可能是导致错误的原因。
检查丢失的.dll的路径:
检查丢失的.dll的路径。如果路径包含空格或任何其他无效路径字符,请将其删除并再次尝试构建。
如果这是原因,则调整构建顺序。